文書番号: 286828 - 最終更新日: 2007年6月14日 - リビジョン: 5.1

Access プロジェクトで Query by Form (QBF) を実装する方法

お知らせお使いのオペレーティング システムには適用しない情報が含まれている場合があります。
この記事は、以前は次の ID で公開されていました: JP286828
難易度 : 高。高度なコーディング能力、相互運用性、およびマルチユーザー環境の経験が必要です。

この資料は Microsoft Access プロジェクト (.adp) についてのみ記述したものです。

Microsoft Access 2000 については、次の資料を参照してください。235359? (http://support.microsoft.com/kb/235359/ )
すべて展開する | すべて折りたたむ

概要

この資料は、Microsoft Access プロジェクトで Access フォームを使用して、クエリ条件を指定する方法について説明します。

詳細

Access データベース (.mdb) または Microsoft Office Access 2007 データベース (.accdb) では、Query by Form (QBF) 技法を使用して条件を入力する "クエリ フォーム" を作成することができます。クエリ フォームには空のテキスト ボックスまたはコンボ ボックスが含まれており、それぞれのボックスはクエリの対象となる Access テーブルのフィールドを表しています。検索条件を指定するボックスにだけ条件を入力します。

Access プロジェクトで QBF 技法を実装することもできます。Access プロジェクトでは、次のように、表示したいレコードを検索するストアド プロシージャを使用した後、そのストアド プロシージャからの出力を表示する追加のフォームを作成します。

ストアド プロシージャの作成

フォームの 1 つにデータを返すために使用するストアド プロシージャを作成するには、以下の手順を実行します。
  1. サンプル Access プロジェクト [NorthwindCS.adp] を開きます。デフォルトでは、このファイルは、<Drive>:\<Microsoft Access samples folder> にインストールされます。
  2. Microsoft Office Access 2003 または Microsoft Access 2002 の場合、[挿入] メニューの [クエリ] をクリックします。

    Microsoft Office Access 2007 の場合、[作成] タブをクリックします。
  3. Access 2003 または Access 2002 の場合、[新しいクエリ] ダイアログ ボックスで [テキスト ストアド プロシージャの作成] をクリックし、[OK] をクリックします。

    Access 2007 の場合、[その他] の [新しいオブジェクト : ストアド プロシージャ] をクリックします。
  4. ストアド プロシージャ ウィンドウに、次の Transact-SQL ステートメントを入力します。
    Create Procedure "QBFProc"
        @CustomerID varchar(10), @EmployeeID int, @OrderDate datetime
        As
        Declare @SQLSTRING  varchar(1000)
        Declare @SelectList varchar(1000)
    
        SET NOCOUNT ON
    
        SELECT @SelectList = 'SELECT * FROM 受注'
    
        --得意先コードの検索条件が NULL かどうかを確認します。
    
        --ここに値が含まれている場合、WHERE 句を作成します。
    
        IF @CustomerID Is NOT NULL  
            BEGIN
                SELECT @SQLString = 'WHERE 得意先コード = ''' + @CustomerID + ''''
            END
    
        --社員コードの検索条件が NULL かどうかを確認します。
    
        --ここに値が含まれている場合、WHERE 句に情報を追加します。
    
        IF @EmployeeID Is NOT NULL
            BEGIN
                IF @SQLSTRING Is NOT NULL 
                    BEGIN
                        SELECT @SQLSTRING = @SQLSTRING + ' AND 社員コード = ' + Convert(varchar(100), @EmployeeID)
                    END
                ELSE 
                    BEGIN
                        SELECT @SQLSTRING = 'WHERE 社員コード = ' + Convert(varchar(100), @EmployeeID)
                    END
            END
    
        --受注日の検索条件が NULL かどうかを確認します。
    
        --ここに値が含まれている場合、WHERE 句に情報を追加します。
    
        IF @OrderDate Is NOT NULL
            BEGIN
                IF @SQLSTRING Is NOT NULL 
                    BEGIN
                        SELECT @SQLSTRING = @SQLSTRING + ' AND 受注日 = ''' + Convert(varchar(20), @OrderDate) + ''''
                    END
                ELSE
                    BEGIN
                        SELECT @SQLSTRING = 'WHERE 受注日 = ''' + Convert(varchar(20), @OrderDate) + ''''
                    END
            END
    
        --3 つのパラメータがすべて NULL の場合以外は SELECT 句と WHERE 句を
    
        --結合し、3 つのパラメータがすべて NULL の場合は無条件で
        --@SelectList を返します。
    
        IF @CustomerID IS NULL AND @EmployeeID IS NULL AND @OrderDate IS NULL
    	BEGIN
    	    SELECT @SelectList = @SelectList
    	END
        ELSE
    	BEGIN
    	    SELECT @SelectList = @SelectList + ' ' +  @SQLSTRING
    	END
    
        --SQL ステートメントを実行します。
    
        EXECUTE(@SELECTLIST)
    					
  5. ストアド プロシージャをデフォルトの名前 (QBFProc) で保存し、プロシージャを閉じます。

Query By Form の作成

次の手順に従って、ストアド プロシージャで使用する検索条件を選択するための QBF_Form フォームを作成します。
  1. テーブルまたはクエリを基にしない新しいフォームを作成し、QBF_Form という名前を付けます。
  2. Access 2003 または Access 2002 の場合、ツールボックスでコントロール ウィザードがオンになっていないことを確認します。Access 2007 の場合、[コントロール] の [コントロール ウィザードの使用] がオンになっていないことを確認します。次に、3 つのコンボ ボックスをフォームに追加し、それぞれに次のプロパティを設定します。
       コンボ ボックス :
       名前 : cboCusID
       値集合タイプ : テーブル/ビュー/ストアド プロシージャ
       値集合ソース : SELECT 得意先コード FROM 得意先
    
    
       コンボ ボックス :
       名前 : cboEmpID
       値集合タイプ : テーブル/ビュー/ストアド プロシージャ
       値集合ソース : SELECT 社員コード, 氏名 FROM 社員
       列数 : 2
       列幅 : 0;1
       連結列 : 1
    
       コンボ ボックス :
       名前 : cboOrder
       値集合タイプ : テーブル/ビュー/ストアド プロシージャ
       値集合ソース : SELECT 受注日 FROM 受注
    					
  3. フォームにコマンド ボタンを追加し、次のとおりプロパティを設定します。
       名前 : cmdOpenFinal
       標題 : Open Form
       クリック時 : [イベント プロシージャ]
    					
  4. [イベント プロシージャ] の右側の [ビルド] ([...]) ボタンをクリックし、次のようにプロシージャを設定します。
    Private Sub cmdOpenFinal_Click()
        DoCmd.OpenForm "frmFinal", acFormDS
    End Sub
    					
  5. QBF_Form という名前でフォームを保存し、フォームを閉じます。

結果を表示するフォームの作成

次の手順に従って、QBF_Form に入力した条件に基づいて実行されたストアド プロシージャの結果を表示する frmFinal フォームを作成します。
  1. Access 2003 または Access 2002 の場合、データベース ウィンドウで [オブジェクト] の [クエリ] をクリックし、[QBFProc] ストアド プロシージャをクリックしてフォーカスを取得します。

    Access 2007 の場合、ナビゲーション ウィンドウでクエリを選択し、[QBFProc] ストアド プロシージャをクリックしてフォーカスを取得します。
  2. Access 2003 または Access 2002 の場合、[挿入] メニューの [オートフォーム] をクリックします。

    Access 2007 の場合、[作成] タブをクリックし、[フォーム] の [フォーム] をクリックします。
  3. パラメータの入力を求めるダイアログ ボックスが表示されたら、[キャンセル] をクリックします。
  4. 作成したフォームに frmFinal という名前を付けて保存します。
  5. このフォームのプロパティで、[入力パラメータ] の値を次のように設定します。
    @CustomerID varchar(10) = Forms!QBF_Form!cboCusID, @EmployeeID int = 
    Forms!QBF_Form!cboEmpID, @OrderDate datetime = Forms!QBF_Form!cboOrder
    					
  6. frmFinal フォームを保存して閉じます。
作成したサンプルを使用して、QBF_Form フォームを開き、コンボ ボックスの値を適宜選択します。コマンド ボタンをクリックして frmFinal フォームを開くと、QBF_Form フォームで選択した条件に一致するすべてのレコードが表示されます。

関連情報

Access データベースの QBF の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
209645? (http://support.microsoft.com/kb/209645/ ) [ACC2000] Query-by-Form (QBF) 技法を使用する方法
TSQL (Transact-SQL) および入力パラメータを使用するストアド プロシージャの作成方法の詳細については、次のマイクロソフト Web サイトを参照してください。
http://www.microsoft.com/sql/techinfo/books.mspx (http://www.microsoft.com/sql/techinfo/books.mspx)

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