2009-05-17 4 views
1

Я не знаю, возможно ли это, но я пытаюсь закодировать текстовое поле Access, которое будет действовать как элемент управления поисковой системой для базы данных. В частности, я хотел добавить в форму многолистные, невидимые, списки и заполнить таблицу или данные запроса. Когда когда-либо конечный пользователь вводит слово поиска в текстовое поле и нажимает на поиск, я хотел бы написать серию операторов «if», которые указывали бы, если запись в текстовом поле соответствует значению в одном из списков, чтобы выполнить пользовательский запрос. Например:Программный поиск элементов управления Listbox Access, основанных на записи в текстовом поле

если (Me.textbox.text = значение в ListBox), то и т.д. ...

Проблема заключается в том, что каждый пример, который я видел до сих пор только поиск значения ListBox с помощью численного или index, например listbox.selected (0). Поскольку текстовое поле принимает строковые значения, а не числовые значения, код должен равняться элементу текстового поля элементом в списке. Я смог добавить число в текстовое поле поиска и найти элемент списка таким образом, но это нецелесообразно, так как мои конечные пользователи будут знать только значения. В целом, мне было интересно, знает ли кто-нибудь, как программно искать список для определенного значения, равного значению, введенному в текстовое поле.

Спасибо,

DFM

ответ

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

Однако, я подозреваю, что вы можете быть приближается к проблема с неправильного направления, несколько скрытых элементов управления редко являются хорошей идеей, и может быть лучше объяснить ваши потребности более полно.

EDIT снова Комментировать

Этот пример не быстро, но это довольно легко.

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 
+0

Спасибо. Я попробую этот пример и посмотрю, работает ли он. Я решил использовать скрытые списки, потому что не смог найти способ сканирования каждого столбца таблицы или запроса для определенного значения. Мое предпочтение было бы найти способ для пользователя ввести значение в текстовое поле, нажать поиск и найти это значение в таблице или запросе. Я считаю, что список будет хорошей работой, поскольку они будут выступать в качестве посредников для определения того, в каком столбце находится значение. Это позволит моему коду создавать пользовательский запрос, в котором оператор where использует значение списка. – 2009-05-17 15:20:49

+0

Если ваши таблицы не особо велики, вы можете объединить поля и выполнить поиск строки. Я добавлю пример в свой ответ. – Fionnuala