2016-07-22 171 views
0

我写了一个组合框模糊搜索,几乎可行。
问题?当我输入2个字符时,它只看到1.MS Access组合框模糊搜索

这是我在“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”的搜索

什么我需要做的就是它是更准确? 此外,如果我删除组合框中的文本,它应该使所有缩小的值 - 重新出现在下拉菜单中,但我必须再次点击“退格”以使过滤列表恢复正常。

我错过了什么?

回答

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 

希望这有助于。

+0

我喜欢它!完全按照预期运行。 – monty327

0

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

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