|
それでは固有のプロパティをVBAプログラムから設定した状態で、新しいレコードを登録してみます。
図32の、新規レコード登録ボタンを押します。

図32 新規レコード登録ボタンを押す
新しいレコードを入力しましょう。患者IDは5番としてデータ入力をします。入力を終えたら次のレコード表示ボタンを押してみます(図33)。

図33 新しいレコードを登録して次のレコードボタンを押すと。。。
ところが図34のエラーメッセージが表示され、その後延々と色々なエラーメッセージが表示され、フォームを閉じることになるでしょう。

図34 表示されたエラーメッセージ
患者テーブルを開いてレコードを見ると、図35のように、先程入力したレコードが登録済みであることに気がつきます。フォームではエラーメッセージが表示されましたが、テーブルに対してレコードが登録されました。
フォームの入力ではなぜエラーメッセージが表示されたのでしょうか?
それは、再同期コマンドプロパティの定義がまだ行なわれていなかったためです。
この再同期コマンドプロパティは、固有のテーブルプロパティで定義されたテーブルの主キーの値(ここでは患者テーブルの患者IDの値)を使って、フォームの連結コントロールに表示するすべての値の取得方法を定義するものです。
例えば、主治医に20番が入力されても、20番に対応した「医師の名前」と「医師の電話番号」をAccessはサーバーから取得しなければいけません。
ストアドプロシージャが返すレコードセットの列名は、図26のように、簡単に騙せるということがわかります。ですからストアドプロシージャによって出力される列名が、実際どのテーブルのどの列から得られるのかAccessにはわかっていないわけです。それを定義してあげるのが、この再同期プロパティです。
再同期プロパティは、SQL文で作る方法と、ストアドプロシージャで作る方法の2通りあります。
SQL文での作り方は、フォームで表示するコントロールの値を出力するSELECT文を次のように書きます。
| SELECT |
| 患者.患者ID |
AS 患者ID, |
| 患者.姓 |
AS 姓, |
| 患者.名 |
AS 名, |
| 患者.主治医 |
AS 主治医, |
| 医師.医師の名前 |
AS 医師の名前, |
| 医師.医師の電話番号 |
AS 医師の電話番号 |
| FROM 患者 INNER JOIN 医師 |
| ON 患者.主治医 = 医師.医師ID |
| WHERE(患者.患者ID = ? ) |
|
重要なのは、レコード検索を行なう条件指定を作ることです。検索する値は、?記号で表現します。
このようなSQL文を、再同期コマンドプロパティで入力します。
再同期コマンドのプロパティ欄でマウスの右クリックメニューで表示されるズームメニューで、SQL文を入力します(図36)。
AS句によって、Accessプロジェクト側で認識している列名を書いてください。

図36 再同期コマンドをSQL文で定義した
|