2016-07-22 69 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:你的搜索沒有任何模糊之處,它是一個常規的全文搜索。