[ACC2002] Access プロジェクトでパラメータ化されたコンボ ボックスを使う方法

この記事は、以前は次の ID で公開されていました: JP281870
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
この資料は Microsoft Access プロジェクト (.adp) についてのみ記述したものです。

概要
コンボ ボックスは、値を一覧から選択することができるコントロールです。コンボ ボックスの値集合ソースが、テーブルやクエリに基づいている場合、WHERE 句を付加して、選択肢を絞り込むことができます。

この資料では、NorthwindCS.adp サンプル プロジェクトの [得意先] フォームにコンボ ボックスを追加し、現在の得意先からの受注一覧を表示します。項目を選択すると、[受注] フォームが開いて、選択した受注の内容が表示されます。

ある得意先からの受注一覧を作成するには 4 つの方法があります。データ ソースとして Microsoft SQL Server 2000 を使った Access プロジェクトを使用して、これらの方法について説明します。
詳細

コンボ ボックスの作成

サンプル プロジェクト NorthwindCS.adp の [得意先] フォームに、現在の得意先からの受注一覧を表示するコンボ ボックスを作成する方法を示します。
  1. デザイン ビューで [得意先] フォームを開きます。
  2. ツールボックスの [コントロール ウィザード] をクリックしてオンにしてから、コンボ ボックスをフォームに追加します。
  3. コンボボックス ウィザードの最初で、テーブルまたはクエリの値を表示するように選択し、[次へ] をクリックします。
  4. コンボボックス ウィザードの 2 番目で、[受注] テーブルをクリックして、[次へ] をクリックします。
  5. コンボボックス ウィザードの 3 番目で、コンボ ボックスのフィールドとして、[受注コード]、[得意先コード]、および [受注日] を追加し、[次へ] をクリックします。
  6. コンボボックス ウィザードの 4 番目で、[キー列を表示しない] チェック ボックスをオフにした後、[得意先コード] 列を縮めて表示されないようにして [次へ] をクリックします。
  7. コンボボックス ウィザードの 5 番目で、データベースに保存または使用するフィールドとして [受注コード] を指定し、[次へ] をクリックします。
  8. コンボボックス ウィザードの 6 番目で、[後の作業で使用する] をクリックして、[次へ] をクリックします。
  9. コンボボックス ウィザードの最後のページで、コンボ ボックスに Select Order というラベルを付け、[完了] をクリックします。
  10. コンボ ボックスのプロパティ シートを開き、コンボ ボックスの名前を SelectOrderCombo に変更します。
  11. コンボ ボックスの "クリック時" プロパティに、次のイベント プロシージャを設定します。
    Private Sub SelectOrderCombo_Click()On Error GoTo Err_SelectOrderCombo_Click    Dim stDocName As String    Dim stLinkCriteria As String    stDocName = "受注"    stLinkCriteria = "[受注コード]=" & Me![SelectOrderCombo]    DoCmd.OpenForm stDocName, , , stLinkCriteriaExit_SelectOrderCombo_Click:    Exit SubErr_SelectOrderCombo_Click:    MsgBox Err.Description    Resume Exit_SelectOrderCombo_ClickEnd Sub

コンボ ボックスを再表示するコード

コンボ ボックスの再表示方法について説明します。次の 4 つの方法のいずれかを選択して、該当するコードをコンボ ボックスの フォーカス取得時イベントに追加します。

方法 1. と 2. では、コンボ ボックスを選択するたびに フォーカス取得時イベントでコンボ ボックスの値集合ソースがリセットされ、現在の得意先に一致する受注だけが表示されます。

方法 1 : 特別な選択の使用

コンボ ボックスの "フォーカス取得時" プロパティに、次のイベント プロシージャを設定します。
Me.SelectOrderCombo.RowSource = "SELECT TOP 100 PERCENT 受注コード, 得意先コード, 受注日 FROM 受注 WHERE " _     & "得意先コード = '" & Forms![得意先]![得意先コード] & "' ORDER BY 受注日 DESC"

方法 2 : SQL Server のビューの使用

  1. データベース ウィンドウで [クエリ] オブジェクトをクリックし、[デザイナを使用してビューを作成する] をダブルクリックします。
  2. [テーブルの追加] ダイアログ ボックスで [受注] テーブルを追加して、[閉じる] をクリックします。
  3. [受注コード]、[得意先コード]、および [受注日] の各フィールドをストアド プロシージャに追加します。
  4. ”受注日” フィールドを降順に並べ替えます。
  5. vwCustomerOrders という名前でビューを保存して、閉じます。
  6. コンボ ボックスの "フォーカス取得時" プロパティに、次のイベント プロシージャを設定します。
    Me.SelectOrderCombo.RowSource = "SELECT * FROM vwCustomerOrders WHERE 得意先コード = '" & Forms![得意先]![得意先コード] & "'"
方法 3. と 4. では、フォーカス取得時イベントでコンボ ボックスの Requery メソッドを呼び出して、ストアド プロシージャまたは SQL 関数を再実行して一致するレコードを返します。これらの例では、抽出条件に @ControlName を使用して、フォーム上のコントロールとしてパラメータが定義されます。Access 2002 は自動的にその抽出条件を評価して、一致するレコードを表示します。

次の例では、コンボ ボックスに現在の得意先に対応する受注すべての一覧が表示されます。[得意先コード] ボックスに、現在の得意先コードが入っているため、ストアド プロシージャや SQL 関数の抽出条件で、直接 [得意先コード] ボックスを参照できます。

方法 3 : SQL Server のストアド プロシージャの使用

  1. データベース ウィンドウで [クエリ] オブジェクトをクリックし、[デザイナを使用してストアド プロシージャを作成する] をダブルクリックします。
  2. [テーブルの追加] ダイアログ ボックスで [受注] テーブルを追加して、[閉じる] をクリックします。
  3. [受注コード]、[得意先コード]、および [受注日] の各フィールドをストアド プロシージャに追加します。
  4. “得意先コード” フィールドの抽出条件に @得意先コード と入力し、"受注日" フィールドを降順に並べ替えます。
  5. ストアド プロシージャを spCustomerOrders という名前で保存し、閉じます。
  6. コンボ ボックスの値集合ソースに、spCustomerOrders ストアド プロシージャを設定します。

    : spCustomerOrders では、次の SQL ステートメントが作成されます。
    ALTER PROCEDURE dbo.spCustomerOrders  (@得意先コード int)  AS SELECT 受注コード, 得意先コード, 受注日  FROM   dbo.受注  WHERE  (得意先コード = @得意先コード)  ORDER BY 受注日 DESC
  7. コンボ ボックスの “フォーカス取得時” プロパティに、次のイベント プロシージャを設定します。
    Me.SelectOrderCombo.Requery

方法 4 : SQL Server 2000 の関数の使用

この方法は、Access プロジェクトがデータ ソースとして SQL Server 2000 またはそれ以降のバージョンを使っている場合にのみ、使用することができます。
  1. データベース ウィンドウで [クエリ] オブジェクトをクリックし、[デザイナを使用して関数を作成します] をダブルクリックします。
  2. [テーブルの追加] ダイアログ ボックスで [受注] テーブルを追加して、[閉じる] をクリックします。
  3. [受注コード]、[得意先コード]、および [受注日] の各フィールドをストアド プロシージャに追加します。
  4. "得意先コード" フィールドの抽出条件に @得意先コード と入力してから、"受注日" フィールドを降順に並べ替えます。
  5. 関数を fnCustomerOrders という名前で保存して閉じます。
  6. コンボ ボックスの [値集合ソース] に、fnCustomerOrders 関数を設定します。

    : fnCustomerOrders では、次の SQL ステートメントが作成されます。
    ALTER FUNCTION dbo.fnCustomerOrders  (@得意先コード int)  RETURNS TABLE  RETURN ( SELECT TOP 100 PERCENT 受注コード, 得意先コード, 受注日  FROM   dbo.受注  WHERE  (得意先コード = @得意先コード)  ORDER BY 受注日 DESC )
  7. コンボ ボックスの “フォーカス取得時” プロパティに、次のイベント プロシージャを設定します。
    Me.SelectOrderCombo.Requery

上記の方法を実行するには、[得意先] フォームを開き、[Select Order] ボックスをクリックします。コンボ ボックスのフォーカス取得時イベントで再クエリが実行されて、現在の得意先に対応する受注一覧が表示されます。項目を選択すると、コンボ ボックスのクリック時 イベントが実行され、[受注] フォームが開き、選択した受注の内容が表示されます。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 281870 (最終更新日 2003-05-09) をもとに作成したものです。

inf
プロパティ

文書番号:281870 - 最終更新日: 12/05/2015 23:11:26 - リビジョン: 1.0

Microsoft Access 2002 Standard Edition

  • kbnosurvey kbarchive kbhowto parameter プロジェクト adp accesscs accxp acc10 ストアドプロシージャ KB281870
フィードバック