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

文書翻訳 文書翻訳
文書番号: 281870 - 対象製品
この記事は、以前は次の 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, , , stLinkCriteria
    
    Exit_SelectOrderCombo_Click:
        Exit Sub
    
    Err_SelectOrderCombo_Click:
        MsgBox Err.Description
        Resume Exit_SelectOrderCombo_Click
    
    End 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) をもとに作成したものです。

プロパティ

文書番号: 281870 - 最終更新日: 2003年11月11日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • Microsoft Access 2002 Standard Edition
キーワード:?
kbhowto parameter プロジェクト adp accesscs accxp acc10 ストアドプロシージャ KB281870
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com