• ベストアンサー

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

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

  • テーブル作成クエリで主キーを設定

    サブフォーム作成のため主キーを設定したいのですが、クエリでグループ化した顧客コードをテーブルとするクエリで主キーを顧客コードに設定したいのですが、クエリ実行で主キー設定方法を教えてください。

  • アクセス 数値型にするとフォームの入力ができない

    お世話になります。色々調べたり、実験してみたのですが、分からない点があります。 簡単でいいので、可能性のある原因を教えてください。 アクセス2003です。 ■パターン1  フォームC の入力ができる テーブルA(主キーがオートナンバー型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る ■パターン2  フォームC の入力ができない テーブルA(主キーが数値型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る 簡単にいうと、テーブルのデータ型によって、入力可否が変わるのです。 なぜ、パターン2は、入力できないのか分かりません。 よろしくお願いします。

  • 主キーの選び方

    主キーが良くわからなくなってきたので質問させてください。 このようなデータベースのとき、主キーは社員番号でいいですよね #同姓同名を考えると社員番号かと 社員番号|氏名|部署 0001|ほげ|デバッグ部隊 0002|ふー|リリース部隊 0003|ばー|クレーム対応部隊 0004|ばー子|接待ゴルフ部隊 0005|ほげ子|リリース部隊 ただ、部署を複数所属してよいとすると、社員番号だけが主キーだと行が一意に決まりません。 このときはどれを主キーとして選ぶべきなんでしょうか? また、○○部隊に所属するひとリストアップするにはどのように正規化(設計?)すればよいのでしょうか? 社員番号|氏名|部署 0001|ほげ|デバッグ部隊 0001|ほげ|接待ゴルフ部隊 0002|ふー|リリース部隊 0003|ばー|クレーム対応部隊 0004|ばー子|接待ゴルフ部隊 0005|ほげ子|リリース部隊

  • アクセスのフォームで入力ができない

    Accessの操作が出来る程度なのに、頑張って「社員台帳」たるものを作成し始めました。 テーブルに ・社員基本データ ・公的資格・学歴データ ・略歴・賃金データ を作成し、社員IDをキーにその3つのデータでクエリーとフォームを作成しました。 テーブルの各データではデータの編集及び追加が可能なのですが、フォーム画面で入力が出来ません。 説明不足かもしれませんが、どなたか教えてください。 宜しくお願いいたします。

  • Accessのフォームで

    教えてください。下のようなテーブルがあり、これを元にフォームを作成したいのですがいい方法が見つかりません。 【テーブル】  品物テーブル(品物ID、品物、製作所)  社員テーブル(品物ID、社員コード、氏名) このテーブルを元にして下のようなフォームを作りたいのです。 【フォーム】  品物ID [テキストボックス]  品物 [テキストボックス]  製作所 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス] ※社員コード、氏名が3つあるのは、同じ品物を3人が作成することがあるため。(この部分で悩んでいます) このようなフォームを作ることは可能でしょうか? また参考になるようなサイトなどあれば教えてください。 よろしくお願いします。

  • フォームで主キー(No)を入力すると他の項目も自動的に表示

    ACCESS2000・フォームで主キー(No)を入力すると他の項目も自動的に表示させたい。 テーブルの構成は、以下のとおりです。 データベース名:報告書 テーブルA          | フォームA  フィールド1(数値)    |  フィールド1(数値)  フィールド2(テキスト)  |  フィールド2(テキスト)  フィールド3(テキスト)  |  フィールド3(テキスト) テーブルB          | フォームB  フィールド1(数値)    |  フィールド1(数値)  フィールド2(テキスト) |  フィールド2(テキスト)   フィールド3b(テキスト) |  フィールド3b(テキスト) 主キーはフィールド1です。 リレーションを組んでおり、テーブルAからテーブルEまでのフィールドは同じ物ならば(フィールド1=フィールド1のように)リレーションを設定しています。 これをフォーム上ででフィールド1(主キー)を入力すれば、他のフィールド2、フィールド3~も自動表示され、他のフォームもフィールド1(主キー)を選択すれば表示されるようにしたい。 ユニオンクエリなどを使うべきなのでしょうか? どなたか回答、宜しくお願いします。

  • Accessの主キーについて

    お願いいたします。 Accessの主キー設定について教えてください。 主キーの役割は、テーブルの中のレコードを区別 するための機能だと思いますが、 フィールドのデータ型をオートナンバー型にして おけば主キーの設定は必要ないのではないでしょう か? 主キーを設定する理由としては、参照整合性のため に行うという考え方で良いでしょうか? また、複数の主キーを設定するという場合のテーブ ル構成はどのような場合のシステムなのでしょうか? どうぞ教えてください。

  • Access 主キーの変更について

    調査データの集計、蓄積用のDBを制作しております。 制作しているDBは主キーに県コードが含まれています。 そのため、調査データの住所に変更があるとコードを変えなければなりません。 AccessでのDBはほぼ完成しており、今からコードの形態を変更することは避けたいです。(もともと古い独自のDBのデータを流用しています。) 現在、主キーに県コードが含まれていますが、それとは別に県コードフィールドを設けています。 ※コードの形態 (先頭の二桁又は一桁が県コード、コードは4桁又は5桁) 例   主キー 北海道 1001 東京  13199 沖縄  47001 新規のデータを入力する際に主キーを入力しているのですが VBAの知識がないので県コードは個別に入力しています。 住所が変わり県が変更になった場合主キーを変更する必要が あるのですが一対多でリレーションシップをいくつもしてあり サブフォームなども使用してます。 主のフォームで主キーを変更した場合、関連付けられたレコードの主キーも変更されるようにしたいのですが可能でしょうか?

  • accessのクエリとフォームの関係についてお尋ねします。

    accessのクエリとフォームの関係についてお尋ねします。 IDを主キーとした同じような構造のテーブルを3つ繋いでクエリを作成し、更にそのクエリをレコードソースとしたフォームを作成しました。 ところがフォームが動かない。テキストボックスを3つ作っていますが、何も表示してないし、レコードも移動しません。 まいった。 accessは2003、vistaを使っております。 素人です。よろしくご教授くださいませ。

  • クエリでなぜか空白?

    テーブル1 社員コード(主キー) 氏名 テーブル2 社員コード 年月日 職務歴 のものから クエリ(社員コードによるパラメータクエリ) 社員コード 氏名 年月日 職務歴 をつくりたいのですが、社員コードによってはレコード全てが空白となってしまいます。勿論、そのコードもテーブル1に入力済なのですが…。 初心者で原因不明のため、どなたかアドバイスをください。宜しくお願いします。