図15:PROC_患者登録 ストアドプロシージャを実行した状態 |
![]() |
Access 2000ではストアドプロシージャの出力するレコードセットの内容を表示することができますが、受け取ったデータの内容を修正するためには条件が必要です。それは、ストアドプロシージャが返すレコードセットと1対1に対応しているテーブル側のデータに限り修正が可能だからです。
「PROC_患者登録」の例のように、1側のテーブルと多側のテーブルを結合した場合に得られるレコードセットは、多側テーブルと1対1に対応します。このため、患者テーブルの内容は修正を行なうことができますが、医師側テーブルは参照しかできません。
それでは、「PROC_患者登録」に連結したフォームを作成してみましょう。
図16:患者テーブルの列を全部選択する |
![]() |
図17:医師テーブルの列も患者テーブルの後に追加する |
![]() |
図18:データの表示方法の確認 |
![]() |
と入力します。「?」は、パラメータの位置を表わし、Accessによって多側テーブルの主キーの値(患者IDの値)が設定されます。
PROC_患者更新?
Access 2000のヘルプファイルの記述が不十分で、この再同期コマンドに設定するSQLの書き方がよくわかりませんでした。最初は「医師の名前」と「医師の電話番号」だけを返すSQL文かなと思いましたが、うまく動いてくれません。結局、レコードのすべてのフィールドを返すSQL文だったのです。このため、「PROC_患者更新」は、「PROC_患者登録」にレコード選択を入れたものになります。
以上のプロパティの設定を図19に示します。
図19:フォームのプロパティの設定 |
![]() |
プロパティを設定したら、フォームを開いてください(図20)。患者テーブルの内容を変更することができますが、医師側テーブルの「医師の名前」と「医師の電話番号」の内容を変更することはできません。自動的にロックがかかります。一方、多側テーブルの修正は許されます(固有のテーブルで定義したテーブル)。
図20:フォームの完成(PROC_患者登録に連結したもの) |
![]() |
また患者テーブルは新規レコードを登録することができます(図21)。ただ「医師の名前」と「医師の電話番号」は、入力することはできません。
図21:新しい患者のレコードを登録します |
![]() |
入力後、次レコードに移動します(図22)。そして、1レコード前に戻ってください。この時先ほど入力した新規レコードの内容がすべて表示されます(図23)。このレコード表示機能が、「再同期コマンド」の役目です。
図22:次レコード移動で、EOF位置に移動する |
![]() |
図23:前レコードに戻る。図21で入力できなかった医師の名前と電話が表示される |
![]() |