|
[フォーム]画面で[新規作成]ボタンを押してください。
「フォームウィザード」を選択し、レコードソースとして「患者検索」ストアドプロシージャを選択します(図21)。

図21 フォームのレコードソースの選択(患者検索ストアドプロシージャ)
図22のように、選択可能なフィールド名が表示されました。この例では、ストアドプロシージャが返すレコードセットの列名をAccessが自動認識した例です。

図22 ストアドプロシージャが返す列名が認識された例
あまりにも複雑なストアドプロシージャを作成すると、Accessがレコードセットの列名を認識できない場合があります。
例えば意地悪な例ですが、実質的には「患者検索」ストアドプロシージャと同じものですが、わざとINSERT文を入れた図23のような例では、列名認識に失敗し、選択可能フィールド欄が空白になります(図24)。

図23 列名が認識できないストアドプロシージャ

図24 選択可能なフィールドが空欄になってしまった
選択可能フィールド名の認識に失敗した場合、Access2000のAccessプロジェクトではコントロールの連結先ソースプロパティの選択ができません。つまり連結フォームの作成ができないのです。
そこでストアドプロシージャの先頭部分にGOTO文を記述し、その間に列名リストを定義します。
例えば図25のようなGOTO文を入れると、この部分で定義されたSELECT文が列名リストであるとAccessプロジェクトは勘違いをします。

図25 列名リストを勘違いするストアドプロシージャ
図26のように、GOTO文で実際には実行されない部分にあるSELECT文で定義された列名リストを選択可能なフィールドとして判断します。
複雑なストアドプロシージャを作成したときに列名リストが認識されないときの回避策として、このような機能を利用します。

図26 列名リストを勘違いした
ところがAccess2002の場合では、列名リストが認識されなくても大丈夫です。それはコントロールのソースプロパティの入力欄が、リストボックス形式から、コンボボックス形式に変わりました。列名が、手入力できるようになったのです。
さて図22で、全部の列名を選択し、完了ボタンを押して、デフォルトの連結フォームを作成してみます。
STパラメータとEDパラメータの値入力があります。1と4を入力してみます。

図27 自動作成されたフォーム
図27のように、入力フォームが表示されました。
ところがこのフォームは、新規レコード入力や、レコードのフィールドの更新ができません。参照専用のフォームになっています。
|