Access で検索フォームの値を使用して動的クエリを作成する方法

高度な機能: 高度なコーディング、相互運用性、マルチユーザー スキルが必要です。

この記事は、Microsoft Access データベース (.mdb) ファイルまたは Microsoft Access データベース (.accdb) ファイル、および Microsoft Access プロジェクト (.adp) ファイルのいずれかに適用されます。

概要

この記事では、Microsoft Access の検索フォームの値を使用してクエリ文字列の条件を動的に構築する方法について説明します。

詳細

場合によっては、検索フォームとして機能するフォームを作成することもできます。 フォームに値を入力し、適切な SQL 文字列を動的に構築できるようにする必要があります。 次の手順では、BuildCriteria メソッドを使用するクエリ文字列を動的に構築する方法を示します。

Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 Microsoft サポート エンジニアは、特定のプロシージャの機能を説明するのに役立ちますが、これらの例を変更して、特定の要件を満たすために追加の機能を提供したり、プロシージャを構築したりすることはできません。注意: この例の手順に従う場合は、サンプル データベースのNorthwind.mdbを変更します。 Northwind.mdb ファイルをバックアップし、データベースのコピーに関する次の手順に従います。

ステップ バイ ステップの例

  1. Access を開始します。
  2. [ ヘルプ ] メニューの [ サンプル データベース] をポイントし、[ Northwind Sample Database] をクリックします。
  3. デザイン ビューで [顧客] フォームを開きます。
  4. コマンド ボタンとテキスト ボックスをフォームに追加し、次のプロパティを設定します。
 Command Button
 ------------------------
 Name: cmdSearch
 Caption: Search
 OnClick: Event Procedure

Text Box
 --------------
 Name: txtSQL
 Width: 4.4583"
 Height: 1.25"
  1. コマンド ボタンの OnClick プロパティを次のイベント プロシージャに設定します。
Private Sub cmdSearch_Click()
    On Error Resume Next

Dim ctl As Control
    Dim sSQL As String
    Dim sWhereClause As String

'Initialize the Where Clause variable.
    sWhereClause = " Where "

'Start the first part of the select statement.
    sSQL = "select * from customers "

'Loop through each control on the form to get its value.
    For Each ctl In Me.Controls
        With ctl
            'The only Control you are using is the text box.
            'However, you can add as many types of controls as you want.
            Select Case .ControlType
                Case acTextBox
                    .SetFocus
                    'This is the function that actually builds
                    'the clause.
                    If sWhereClause = " Where " Then
                        sWhereClause = sWhereClause & BuildCriteria(.Name, dbtext, .Text)
                    Else
                        sWhereClause = sWhereClause & " and " & BuildCriteria(.Name, dbtext, .Text)
                    End If
            End Select
        End With
    Next ctl

'Set the forms recordsource equal to the new
    'select statement.
    Me.txtSQL = sSQL & sWhereClause
    Me.RecordSource = sSQL & sWhereClause
    Me.Requery

End Sub

  1. フォームを保存し、フォーム ビューで開きます。

    [検索] コマンド ボタンをクリックすると、[顧客] フォームの値から作成されたクエリが txtSQL テキスト ボックスに反映されることに注意してください。 また、新しい SQL 文字列の結果を反映するように、Customers フォームが再クエリされました。

関連情報

BuildCriteria メソッドの詳細については、Visual Basic エディターの [ヘルプ] メニューの [Microsoft Visual Basic ヘルプ] をクリックし、Office アシスタントまたは応答ウィザードで「buildcriteria メソッド」と入力し、[検索] をクリックしてトピックを表示します。