|
ストアドプロシージャでレコードを絞り込んで、レコードセットを返したものは、ビュー表と同じ扱いを受けます。
2個のテーブルを結合して作成したレコードセットでは、参照整合性の多側テーブルに所属する列の値だけを更新することができます。この例では、患者テーブルに関係する列です。
ストアドプロシージャに連結したAccessのフォームでは、医師テーブルと患者テーブルのどちらが参照整合性の多側テーブルになっているのか(更新可能なテーブルなのか)、その判断ができません。それを教えてあげます。
それを教えてあげるのが、「固有のテーブル」プロパティです。

図28 固有のテーブルプロパティ。ここで患者テーブルの選択ができるはず。
フォームのプロパティを表示し、データタブにある「固有のテーブル」プロパティをクリックします(図28)。
本来はこのリストボックスで表示される中に、患者テーブルが選べるようになっていなければいけません。ここはAccess2002でもリストボックス形式のままです。テーブル名の手入力はできません。
おかしいですね。Access2000では、ちゃんとテーブル名が表示されたのに。。。
原因がわかりませんので、VBAで設定しましょう。フォームが読み込まれるLoadイベントのところで、プロパティをセットします(図29)。

図29 固有のテーブルプロパティ。ここで患者テーブルの選択ができるはず。
フォームのUniquTableプロパティに、参照整合性の多側テーブルである患者テーブル名をセットします。
フォームを表示してみましょう。検索するパラメータ入力がありますので、1以上4以下とします。
今度はどうでしょうか?フォームのフィールドが更新できると思います。
ところが何かおかしいですね。すべての列が更新できてしまいました。Access2000では、主キー側テーブル(医師テーブル)に関係する列の入力は、自動的に禁止されるようになっておりましたが、Access2002では、医師の名前や電話番号まで修正ができます。
入力を終えて、医師テーブルを開いてみると、確かに更新されています(図32)。
これはAccess2002の新しい機能なのでしょうか?

図30 フォームで列の修正を行なうことができるようになった

図31 確かに医師テーブルの列も修正された

図32 新規レコード登録ボタンを押す
Access2000に慣れている方や、ビュー表が主キー側の更新はできないと知っている方は、途惑ってしまう機能ですね。
ここでは、医師テーブル側のコントロールは、編集不可にします。ロックの設定をしましょう。編集ロックプロパティを「はい」にしました。
|