MS Access组合框模糊搜索

时间:2016-07-22 01:05:41

标签: access-vba

我编写了一个几乎可以工作的组合框模糊搜索 问题?当我键入2个字符时,它只会看到1。

这是来自" KeyPress"中的组合框的代码。事件

Private Sub cmbBASELINE_SEARCH_KeyPress(KeyAscii As Integer)
       Dim strSQL As String


        strSQL = "SELECT tbl_COB_CAT.COB_ID, tbl_COB_CAT.BASELINE " _
               & "FROM tbl_COB_CAT " _
               & "WHERE tbl_COB_CAT.BASELINE Like '*" & Me.cmbBASELINE_SEARCH.Text & "*'" _
               & "ORDER BY tbl_COB_CAT.BASELINE; "



        Debug.Print strSQL


               Select Case KeyAscii
               Case 65 To 90, 48 To 57, 8 ' A-Z, 0-9 and backspace
               'Let these key codes pass through
                   Me.cmbBASELINE_SEARCH.RowSource = strSQL
                   Me.cmbBASELINE_SEARCH.Dropdown


               Case 97 To 122, 8, 127 'a-z, backspace and delete
               'Let these key codes pass through
                   Me.cmbBASELINE_SEARCH.RowSource = strSQL
                   Me.cmbBASELINE_SEARCH.Dropdown
               Case Else
               'All others get trapped
                   KeyAscii = 0 ' set ascii 0 to trap others input
               End Select


End Sub

例如,如果我键入" CAB"它搜索 CA 如果我输入" 25"它搜索 2

我需要做些什么才能让它更准确? 此外,如果我擦除组合框中的文本,它应该使所有缩小的值 - 重新出现在下拉列表中,但我必须击中"退格"再一次使筛选后的列表恢复正常。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我怀疑问题是您使用的是KeyPress事件,而不是KeyUp事件;当你使用按键时,按下的键在理论上还没有添加到控件中的文本中 - 你事先已经将它困住了。

因此我假设你的debug.print SQL语句的输出反映了这一点。

我建议那不是你得到的,而是你需要这样做:

Private Sub cmbBASELINE_SEARCH_KeyPress(KeyAscii As Integer)
    Dim strSQL As String
    dim valu   as string: valu = ""

    Select Case KeyAscii
        Case 65 To 90, 48 To 57, 97 To 122, 8, 127 'A-Z, a-z, 0-9, BS & Del
            'Let these key codes pass through
            valu = cboBASELINE_SEARCH.Text & chr(KeyAscii)
        Case Else 
            'All others get trapped
            KeyAscii = 0 ' set ascii 0 to trap others input
            Exit Sub
    End Select

    strSQL = "SELECT COB_ID, BASELINE FROM tbl_COB_CAT " _
           & "WHERE BASELINE LIKE '*" & valu & "*' ORDER BY 2"

    Me.cmbBASELINE_SEARCH.RowSource = strSQL
    Me.cmbBASELINE_SEARCH.Dropdown

    Debug.Print strSQL
End Sub

希望这有帮助。

答案 1 :(得分:0)

或者您可以简单地使用文本框的Change事件,并在该事件过程中使用其.Text属性。我认为没有理由单独手动单击击键。

Nitpick:你的搜索没有任何模糊,它是一个常规的全文搜索。