パラメータ付きストアドプロシージャへの連結

 ストアドプロシージャPROC_社員2は、DBSETUP.SQLの中で定義されていますが、次のようなストアドプロシージャです。

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ユーザが待ち望んでいたものです。
 このパラメータ付きストアドプロシージャに対して、連結フォームを作成してみます。

  1. 社員テーブルを使って連結フォームを作成する手順は前と同じです。
  2. フォームのレコードソースをストアドプロシージャPROC_社員2に設定します(図10と同様)。
  3. フォーム上にストアドプロシージャのパラメータ“@ST”や“@ED”に対応するテキストボックスを2個配置します。テキストボックスの名前は、STとEDにします。
  4. フォームの再クエリを実行するためのコマンドボタンを1個配置します。

 以上のフォームのデザイン修正と追加を行なってください(図12)。

図12:パラメータ付きストアドプロシージャへの連結フォーム(デザイン時)

 [コマンド]ボタンが押されたときに実行するプログラムは、このフォームに連結されたレコードソースの再クエリ処理です。VBAのプログラムでは、フォームのREQUERYメソッドを呼びます。今回はVBAプログラムを作らない主義? なので、マクロの「再クエリ」アクションを実行しましょう。
 さてストアドプロシージャのパラメータと、コントロールの関係を定義するのがフォームの「入力パラメータ」プロパティです。

  1. 「入力パラメータ」プロパティにコントロールの値、

    @ST INT = FORMS("社員2")![ST] , @ED INT = FORMS("社員2")![ED]

    という命令を書きます。

  2. 図13のように設定してください。この式の意味は、

    @パラメータ名 データ型 = Accessの式

    です。ストアドプロシージャのパラメータ名と、そのパラメータの型、そのパラメータに割り当てる値またはAccessの式となります。

    図13:フォームの「入力パラメータ」の定義

     以上を設定して、フォームを開いて検索範囲を入力してボタンを押してください。該当するレコードが検索され表示されます(図14)。しかも新しいレコードの追加ができることを確認してください。
     この機能こそ、今まで待ち望んでいたパラメータ付きストアドプロシージャに対する連結フォーム機能です。もうVisual StudioやVisual Basicともオサラバ! C/S開発の最終秘密兵器です。

    図14:パラメータ付きストアドプロシージャへの連結フォーム(実行時)