CREATE PROCEDURE PROC_社員2
@ST int = 0 ,
@ED int = 9999
AS
SELECT 社員番号,氏名,住所,電話
FROM 社員
WHERE 社員番号 BETWEEN @ST AND @ED
これは、社員番号の検索条件を外部から与えるパラメータ付きストアドプロシージャです。ストアドプロシージャのパラメータ名は、「@」マークで始まります。“@ST”や“@ED”はint型(4バイト整数)です。
パラメータ宣言の後にある“=0”や“=9999”は、パラメータを省略してストアドプロシージャを呼び出したときの値を定義します。
この例のように、検索範囲をパラメータによって与えて該当するレコードだけを取得するストアドプロシージャを活用しましょう。クライアント側がほんとうに必要としているレコードだけをネットワークに流すこの機能こそ、今までAccess 97ユーザが待ち望んでいたものです。
このパラメータ付きストアドプロシージャに対して、連結フォームを作成してみます。
以上のフォームのデザイン修正と追加を行なってください(図12)。
図12:パラメータ付きストアドプロシージャへの連結フォーム(デザイン時) |
![]() |
[コマンド]ボタンが押されたときに実行するプログラムは、このフォームに連結されたレコードソースの再クエリ処理です。VBAのプログラムでは、フォームのREQUERYメソッドを呼びます。今回はVBAプログラムを作らない主義? なので、マクロの「再クエリ」アクションを実行しましょう。
さてストアドプロシージャのパラメータと、コントロールの関係を定義するのがフォームの「入力パラメータ」プロパティです。
@ST INT = FORMS("社員2")![ST] , @ED INT = FORMS("社員2")![ED]
という命令を書きます。
@パラメータ名 データ型 = Accessの式
です。ストアドプロシージャのパラメータ名と、そのパラメータの型、そのパラメータに割り当てる値またはAccessの式となります。
図13:フォームの「入力パラメータ」の定義 |
![]() |
以上を設定して、フォームを開いて検索範囲を入力してボタンを押してください。該当するレコードが検索され表示されます(図14)。しかも新しいレコードの追加ができることを確認してください。
この機能こそ、今まで待ち望んでいたパラメータ付きストアドプロシージャに対する連結フォーム機能です。もうVisual StudioやVisual Basicともオサラバ! C/S開発の最終秘密兵器です。
図14:パラメータ付きストアドプロシージャへの連結フォーム(実行時) |
![]() |