トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション
8. レコード更新可能なフォームにする

ストアドプロシージャでレコードを絞り込んで、レコードセットを返したものは、ビュー表と同じ扱いを受けます。

2個のテーブルを結合して作成したレコードセットでは、参照整合性の多側テーブルに所属する列の値だけを更新することができます。この例では、患者テーブルに関係する列です。

ストアドプロシージャに連結したAccessのフォームでは、医師テーブルと患者テーブルのどちらが参照整合性の多側テーブルになっているのか(更新可能なテーブルなのか)、その判断ができません。それを教えてあげます。
それを教えてあげるのが、「固有のテーブル」プロパティです。


図28 固有のテーブルプロパティ。ここで患者テーブルの選択ができるはず。

フォームのプロパティを表示し、データタブにある「固有のテーブル」プロパティをクリックします(図28)。
本来はこのリストボックスで表示される中に、患者テーブルが選べるようになっていなければいけません。ここはAccess2002でもリストボックス形式のままです。テーブル名の手入力はできません。

おかしいですね。Access2000では、ちゃんとテーブル名が表示されたのに。。。

原因がわかりませんので、VBAで設定しましょう。フォームが読み込まれるLoadイベントのところで、プロパティをセットします(図29)。


図29 固有のテーブルプロパティ。ここで患者テーブルの選択ができるはず。

フォームのUniquTableプロパティに、参照整合性の多側テーブルである患者テーブル名をセットします。

フォームを表示してみましょう。検索するパラメータ入力がありますので、1以上4以下とします。

今度はどうでしょうか?フォームのフィールドが更新できると思います。

ところが何かおかしいですね。すべての列が更新できてしまいました。Access2000では、主キー側テーブル(医師テーブル)に関係する列の入力は、自動的に禁止されるようになっておりましたが、Access2002では、医師の名前や電話番号まで修正ができます。

入力を終えて、医師テーブルを開いてみると、確かに更新されています(図32)。
これはAccess2002の新しい機能なのでしょうか?


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


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


図32 新規レコード登録ボタンを押す

Access2000に慣れている方や、ビュー表が主キー側の更新はできないと知っている方は、途惑ってしまう機能ですね。

ここでは、医師テーブル側のコントロールは、編集不可にします。ロックの設定をしましょう。編集ロックプロパティを「はい」にしました。


<< 前へ次へ >>
◆PAGE LINK  |  |  |  |  |  |  |  |  |  | 10 | 11 | 12 | 13 

PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.