我编写了一个几乎可以工作的组合框模糊搜索 问题?当我键入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
我需要做些什么才能让它更准确? 此外,如果我擦除组合框中的文本,它应该使所有缩小的值 - 重新出现在下拉列表中,但我必须击中"退格"再一次使筛选后的列表恢复正常。
我错过了什么?
答案 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:你的搜索没有任何模糊,它是一个常规的全文搜索。