• ベストアンサー

主キーが二つないと、フォーム入力が思ったようにできないのか?

こんばんは。 従業員の出入りが激しいため、従業員の入社時の「志望動機」と 「退社理由」をデータベースで残して 分析しようという試みのため、 入力用にフォームを作ったけどうまくいきません。 (1)社員基本情報テーブル(主キーは、社員コード。フィールドは、社員コード、氏名、入社日、退社日、部署) (2)入退社テーブルを新規に作成(主キーは社員コード。フィールドは志望動機、退社理由) (1)、(2)を社員コードで結合してクエリを作成しました。 このクエリを元に、フォームを作成しました。 こちらで作成したいフォームのイメージは 社員コードを入れると、氏名と部署、入社日、退社日が自動的に参照。 あとは志望動機と退社理由を入れる。 ところが、実際には 社員コードを入れても自動的に参照は行われず、ただ、一度フォームを閉じてもう一度開けるとそこには上記データが参照されてきます。 ちなみに、(2)で主キーを社員コードと志望動機の二つにすると うまくいったのです。 うまくいった理由も分からないですし、うまくいかなかった理由も分かりません。 これは何がどう悪くてこのようになっているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

>今回の件と参照結合性の話は関係ないと思います。 完全一致の1対1でない場合でも参照整合性が設定できることは確認しました 参照整合性とは関係ないようですが ご質問の現象は完全一致でない1対1結合のテーブルだから起こっていもるものです 完全一致でない1対1結合(こういう関係を派生関係といいます)のテーブルでの入力は 前の回答に書いたように、メインサブ形式のフォームでやるのが一般的手法です

paopao1234
質問者

お礼

お礼がおそくなり申し訳ございません。 派生関係や、参照整合性など 普段 あまり深く理解せずDBを扱っている自分にきづきました。 勉強になりました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

フォームのクエリは開いた時点の情報です。フィールドに社員コードを入力した時点では、まだテーブルにも保存されていません。更に、テーブルに保存したとしても、毎回クエリが再計算される訳ではありません。(VBAでRequeryすれば再計算されますが、最初のレコードに移動してしまうので希望する動作にはなりません。) これは正常な動作です。 逆に、自動的に参照される方が、限られたケースです。 (詳しい条件は分かりませんでした) 入退社テーブルを入力するフォームでしたら、入退社テーブルをレコードソースにして、氏名等はDlookup関数等で参照するのが一般的な手法だと思います。 補足 >1対1結合では両方の主キーにまったく同じレコードが格納されていないと >参照整合性の設定ができません 設定できますよ。ドラッグする方向を間違えてませんか? 参照結合性を設定しても、自動的には参照されませんでした。 今回の件と参照結合性の話は関係ないと思います。

paopao1234
質問者

お礼

お礼が遅くなり申し訳ございません。 Dlookupは、使ったことがなかったのですが、 過去のQ&Aをみて、みようみまねで、やってみたら できました。ただ、表示されるのが少し遅い?ような 感じなのですが、何か私のほうでまた よくない構造にしているのかもしれませんね。

すると、全ての回答が全文表示されます。
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

>社員コードを入れても自動的に参照は行われず 参照整合性が設定できないテーブルの関係になっているからです 主キーが同じテーブル同士の結合は1対1の結合になります 1対1結合では両方の主キーにまったく同じレコードが格納されていないと 参照整合性の設定ができません >主キーを社員コードと志望動機の二つにするとうまくいったのです。 1対多の関係のテーブルになるからです 今のテーブル構成でやりたければ 基本情報テーブルをメインフォームにし そこに入退社テーブルをサブフォームとしてはめ込むというような インタフェースにするしかないでしょうね

paopao1234
質問者

お礼

お礼が大変遅くなり申し訳ございませんでした。 メインサブフォームは苦手なものの一つですが これを機会に勉強します。

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

できれば何のDBで、どのようなインタフェースで表示を おこなっているか書いた方がよいでしょう

paopao1234
質問者

補足

すいません・・初心者なもので、うっかりしていました。 DBはaccess2002です。

すると、全ての回答が全文表示されます。

関連するQ&A