こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

こんばんは。
従業員の出入りが激しいため、従業員の入社時の「志望動機」と
「退社理由」をデータベースで残して 分析しようという試みのため、
入力用にフォームを作ったけどうまくいきません。

(1)社員基本情報テーブル(主キーは、社員コード。フィールドは、社員コード、氏名、入社日、退社日、部署)
(2)入退社テーブルを新規に作成(主キーは社員コード。フィールドは志望動機、退社理由)

(1)、(2)を社員コードで結合してクエリを作成しました。
このクエリを元に、フォームを作成しました。

こちらで作成したいフォームのイメージは
社員コードを入れると、氏名と部署、入社日、退社日が自動的に参照。
あとは志望動機と退社理由を入れる。

ところが、実際には
社員コードを入れても自動的に参照は行われず、ただ、一度フォームを閉じてもう一度開けるとそこには上記データが参照されてきます。

ちなみに、(2)で主キーを社員コードと志望動機の二つにすると
うまくいったのです。
うまくいった理由も分からないですし、うまくいかなかった理由も分かりません。

これは何がどう悪くてこのようになっているのでしょうか?

投稿日時 - 2006-12-22 22:27:40

QNo.2619659

すぐに回答ほしいです

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

>今回の件と参照結合性の話は関係ないと思います。
完全一致の1対1でない場合でも参照整合性が設定できることは確認しました

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

投稿日時 - 2006-12-25 16:43:42

お礼

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

投稿日時 - 2007-02-06 23:05:46

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

フォームのクエリは開いた時点の情報です。フィールドに社員コードを入力した時点では、まだテーブルにも保存されていません。更に、テーブルに保存したとしても、毎回クエリが再計算される訳ではありません。(VBAでRequeryすれば再計算されますが、最初のレコードに移動してしまうので希望する動作にはなりません。)

これは正常な動作です。

逆に、自動的に参照される方が、限られたケースです。
(詳しい条件は分かりませんでした)

入退社テーブルを入力するフォームでしたら、入退社テーブルをレコードソースにして、氏名等はDlookup関数等で参照するのが一般的な手法だと思います。


補足
>1対1結合では両方の主キーにまったく同じレコードが格納されていないと
>参照整合性の設定ができません
設定できますよ。ドラッグする方向を間違えてませんか?

参照結合性を設定しても、自動的には参照されませんでした。
今回の件と参照結合性の話は関係ないと思います。

投稿日時 - 2006-12-24 19:07:43

お礼

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

投稿日時 - 2007-02-06 23:04:12

ANo.2

>社員コードを入れても自動的に参照は行われず
参照整合性が設定できないテーブルの関係になっているからです
主キーが同じテーブル同士の結合は1対1の結合になります
1対1結合では両方の主キーにまったく同じレコードが格納されていないと
参照整合性の設定ができません

>主キーを社員コードと志望動機の二つにするとうまくいったのです。
1対多の関係のテーブルになるからです

今のテーブル構成でやりたければ
基本情報テーブルをメインフォームにし
そこに入退社テーブルをサブフォームとしてはめ込むというような
インタフェースにするしかないでしょうね

投稿日時 - 2006-12-23 01:31:21

お礼

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

投稿日時 - 2007-02-06 23:02:37

ANo.1

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

投稿日時 - 2006-12-22 22:38:32

補足

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

投稿日時 - 2006-12-22 22:56:58

あなたにオススメの質問