3

アクセス2010の検索顧客フォームを作ろうとしています。

クエリ検索に基づいたオプション グループが欲しいです。名または姓を検索する検索クエリを作成しました。フォームには、クエリ入力 (名と姓) を入力するための 2 つのテキストボックスもあります。

予約目的で結果の名前を選択できるように、オプション グループが必要です。

過去に、サブフォームとチェックボックスを使用してこれを行う間接的な方法を作成しました。次に、両方の結果をサブフォームとチェックボックス (再クエリ) にロードして、ユーザーがチェックボックスを選択するだけで済むようにします。でも今回はオプションをクエリ結果そのものにしたい!助けてください。

4

1 に答える 1

10

リスト ボックスを使用する簡単な例を次に示します。

表: クライアント

ID - オートナンバー
姓 - テキスト (255) 名
- テキスト (255)
電子メール - テキスト (255)

テストデータ:

ID  LastName    FirstName       Email
--  ----------  --------------  ------------------
1   Thompson    Gord            gord@example.com
2   Loblaw      Bob             bob@example.com
3   Kingsley    Hank            hank@example.com
4   Thompson    Hunter S.       hunter@example.com
5   Squarepants Spongebob       ss@example.com
6   O'Rourke    P. J.           pj@example.com
7   Aldrin      Edwin "Buzz"    buzz@example.com

フォームのレイアウト:

デザインビュー

このフォームの VBA モジュール:

Option Compare Database
Option Explicit

Private Sub Form_Load()
Me.lstSearchResults.RowSource = ""
End Sub

Private Sub btnSearch_Click()
Me.lstSearchResults.SetFocus
Me.lstSearchResults.Value = Null
Me.lstSearchResults.RowSource = _
        "SELECT ID, LastName, FirstName FROM Clients " & _
            "WHERE LastName LIKE ""*" & DQ(Me.txtSearchLastName.Value) & _
                "*"" AND FirstName LIKE ""*" & DQ(Me.txtSearchFirstName.Value) & "*"""
End Sub

Private Function DQ(s As Variant) As String
' double-up double quotes for SQL
DQ = Replace(Nz(s, ""), """", """""", 1, -1, vbBinaryCompare)
End Function

Private Sub btnLookupEmail_Click()
If IsNull(Me.lstSearchResults.Value) Then
    Me.txtEmail.Value = ""
Else
    Me.txtEmail.Value = DLookup("Email", "Clients", "ID=" & Me.lstSearchResults.Value)
End If
End Sub

フォームが最初に開かれたとき、すべてが空です。

最初に開いた

「thompson」と入力して (引用符なしで) クリックするとbtnSearch、リスト ボックスに client が表示されますWHERE LastName LIKE "*thompson*"。(コードを見ると、FirstName を指定すると、FirstName でも一致することがわかります。)

の検索結果

リスト ボックス内の項目の 1 つを選択してクリックbtnLookupEmailすると、電子メール アドレスが下のテキスト ボックスに表示されます。

メールが見つかりました

于 2013-03-28T11:15:53.360 に答える