2017-10-19 173 views
1

我已經收到了我的一個問題,我的一位同事回答了這個問題,但是我想在這裏重新發帖,以防其他人遇到問題並提出問題,最後請注意。如果感興趣的話,原文如下:Original Post多字段搜索在您鍵入時顯示搜索結果

非常感謝社區的所有人,尤其是@Andre的幫助!

很奇怪,但是當我這樣做,它一直試圖把我的所有字母倒退。例如:如果我搜索「史密斯」,它會將其輸入爲「受害者」。我確信這與點擊事件有關,但我有一位朋友看着它,我認爲她已經破解了它!它看起來像這樣(我已經添加了對新代碼行的評論):

首先,文本框單擊事件,當您單擊該框時,它會清除文本並重置搜索(無需復位按鈕)

Private Sub txtSearch_Click() 
    Me.txtSearch.SetFocus 'new line of code 
    Me.txtSearch.Text = "" 
    Me.Requery 
With Me.txtSearch 
    .SetFocus 
    .SelStart 
End With 
End Sub 

這是實際的搜索,將搜索多個領域

Private Sub txtSearch_Change() 
    Dim strFilter As String 
    Dim sSearch As String 
    On Error Resume Next 

If Me.txtSearch.Text <> "" Then 
    sSearch = "'*" & Replace(Me.txtSearch.Text, "'", "''") & "*'" 
    strFilter = "[Last_Name] Like " & sSearch & " OR [First_Name] Like " & sSearch & " OR [SSN] Like " & sSearch 
    Me.Filter = strFilter 
    Me.FilterOn = True 
Else 
    Me.Filter = "" 
    Me.FilterOn = False 
End If 

If Me.Recordset.RecordCount = 0 Then 'new line of code 
    Me.Filter = "" 'new line of code 
    Me.FilterOn = False 'new line of code 
    Me.txtSearch.SetFocus 'new line of code 
    Me.txtSearch.Text = "" 'new line of code 
Exit Sub 'new line of code 
End If 'new line of code 

With Me.txtSearch 
    .SetFocus 
    .SelStart = Len(Me.txtSearch.Text) 
End With 
End Sub 

這似乎是偉大的工作。雖然我正在考慮完成這個問題,但我確實有一個問題,如果你能幫助我確定,爲什麼當我用.Value替換.Text時,這些字母會倒退?

非常感謝您的幫助!

+1

如果@Andre在原帖中提供的答案解決了您的問題,請考慮接受它以幫助可能面臨同樣問題的其他用戶。 –

+0

我的錯誤,我想我點了那個,當我把它。完成原始帖子。也謝謝@KostasK。爲了幫助您解決倒退文本。我認爲它與此有關,但我想我誤解了.SelStart做了什麼,它每次重新調整焦點。我將在我的數據庫中實施,看看我能否更多地理解它。謝謝! –

+0

.SelStart(選擇開始)僅將光標定位到給定的值。如果沒有給出任何值,則它位於0。 –

回答

0

首先,你需要將Click事件更改Enter和報廢.SetFocus因爲控制將具有焦點:

Private Sub txtSearch_Enter() 
    With Me 
     .txtSearch.Value = "" 
     .Requery 
    End With 
End Sub 

關於.Text.Value之間的區別:

.Text屬性更新與您在.Value屬性更新時所做的每次擊鍵只有控件失去焦點時。

Change事件上,應該檢查兩件事情:a)文本框具有應用過濾器的值(.Text)和b)記錄計數以在沒有記錄返回時清除過濾器。

Private Sub txtSearch_Change() 
    Dim strFilter As String, sSearch As String 

    On Error Resume Next 
    With me 
     If .txtSearch.Text <> "" Then 
      sSearch = "'*" & Replace(.txtSearch.Text, "'", "''") & "*'" 
      strFilter = "[Last_Name] Like " & sSearch & " OR [First_Name] Like " & sSearch & " OR [SSN] Like " & sSearch 
      .Filter = strFilter 
      .FilterOn = True 
     End If 

     If .Recordset.RecordCount = 0 Then 
      .Filter = "" 
      .FilterOn = False 
     End If 
    End With 
End Sub 


的原因落後的信件,是.SelStart屬性在光標呈跳躍在每鍵入一個字母開始的時候,從而給你的印象它向後翻轉字。