0

これが可能かどうかはわかりませんが、データベースの検索エンジン エントリ コントロールとして機能する Access テキスト ボックスをコーディングしようとしています。具体的には、複数の非表示のリストボックスをフォームに追加し、それらにテーブルまたはクエリ データを入力したいと考えていました。エンドユーザーがテキストボックスに検索語を入力して検索を押すたびに、テキストボックスのエントリがリストボックスのいずれかの値と一致するかどうかを指定する一連の「if」ステートメントを記述して、カスタムを実行したいと考えました。クエリ。例えば:

if (Me.textbox.text = リストボックスの値) then etc ...

問題は、私がこれまでに見たすべての例は、数値または listbox.selected(0) などのインデックスによってのみリストボックスの値を検索することです。テキストボックスは数値ではなく文字列値を取るため、コードはテキストボックスのエントリをリストボックスの項目と同一視する必要があります。検索テキストボックスに数字を追加してリストボックス項目を見つけることはできましたが、エンドユーザーは値しか知らないため、これは実用的ではありません。全体として、テキストボックスに入力された値と等しい特定の値をリストボックスでプログラムで検索する方法を誰かが知っているかどうか疑問に思っていました。

ありがとうございました、

DFM

4

1 に答える 1

0

これを行うには、いくつかの方法があります。たとえば、次のとおりです。

Function CheckForItem(strItem, ListB As ListBox) As Boolean
Dim rs As DAO.Recordset
Dim db As Database
Dim tdf As TableDef

  Set db = CurrentDb

  CheckForItem = False

  Select Case ListB.RowSourceType
      Case "Value List"
          CheckForItem = InStr(ListB.RowSource, strItem) > 0

      Case "Table/Query"
          Set rs = db.OpenRecordset(ListB.RowSource)

          For i = 0 To rs.Fields.Count - 1
              strList = strList & " & "","" & " & rs.Fields(i).Name
          Next

          rs.FindFirst "Instr(" & Mid(strList, 10) & ",'" & strItem & "')>0"

          If Not rs.EOF Then CheckForItem = True

      Case "Field List"

          Set tdf = db.TableDefs(ListB.RowSource)

          For Each itm In tdf.Fields
              If itm.Name = strItem Then CheckForItem = True
          Next

  End Select

End Function

から: http://wiki.lessthandot.com/index.php/Listbox:_Does_an_Item_Exist

ただし、間違った方向から問題に取り組んでいる可能性があると思います。複数の隠しコントロールが良い考えになることはめったになく、ニーズをより完全に説明する方がよい場合があります。

コメントを編集

この例は高速ではありませんが、非常に簡単です。

Sub SearchTables(strFind As String)
''Reference: Microsoft DAO x.x Object Library
Dim db As Database
Dim tdf As TableDef
Dim fld As DAO.Field
Dim rs As DAO.Recordset
Dim strSQL As String
Dim strMessage As String

Set db = CurrentDb

For Each tdf In db.TableDefs

    strFieldList = ""

    For Each fld In tdf.Fields
        strFieldList = strFieldList & " & [" & fld.Name & "]"
    Next

    strSQL = "SELECT * FROM [" & tdf.Name & "] " _
    & "WHERE Instr(" & Mid(strFieldList, 4) & ",'" & strFind & "') > 0"

    Set rs = CurrentDb.OpenRecordset(strSQL)

    If Not rs.EOF Then
        rs.MoveLast '' Populate recordset, a little slower
        strMessage = strMessage & vbCrLf & tdf.Name & " : " & rs.RecordCount
    End If
Next

MsgBox "Found in - " & vbCrLf & IIf(strMessage = vbNullString, "None", strMessage)
End Sub
于 2009-05-17T14:35:32.673 に答える