簡體   English   中英

VB表單和MS Access SQL通配符搜索

[英]VB Form and MS Access SQL Wildcard Search

我的表table1有3個字段: FNameLNamePhone 我正在使用Microsoft Access 2010運行SQL查詢。 有些行的電話值為空/空。

我有一個VB表格,可以接受搜索參數。 用戶可以輸入(FName and LName)(Phone) ,但不能同時輸入兩者。

當我嘗試:

SELECT table1.LName, table1.FName, table1.Phone FROM table1 WHERE table1.LName Like ('*' & Forms!frmSearchMain!LName & '*') AND table1.FName Like ('*' & Forms!frmSearchMain!FName & '*') ORDER BY table1.LName, table1.FName;

它為我提供了一個與給定( FNameLName )參數匹配的用戶列表。 工作正常。

同樣,當我嘗試:

SELECT table1.LName, table1.FName, table1.Phone FROM table1 WHERE table1.Phone Like ('*' & Forms!frmSearchMain!Phone & '*') ORDER BY table1.LName, table1.FName;

它為我提供了與給定( Phone )參數匹配的用戶列表。 它也很好。

但是,當我結合這兩個查詢時:

SELECT table1.LName, table1.FName, table1.Phone FROM table1 WHERE table1.Phone Like ('*' & Forms!frmSearchMain!Phone & '*') AND table1.LName Like ('*' & Forms!frmSearchMain!LName & '*') AND table1.FName Like ('*' & Forms!frmSearchMain!FName & '*') ORDER BY table1.LName, table1.FName;

它沒有給我預期的結果。

我什至嘗試了( FNameLName )和( Phone )搜索參數之間的OR條件。 沒用 我已經嘗試使用nz(frmSearchMain!Phone,"")來搜索所有搜索參數,用%代替* ,但是到目前為止還沒有運氣。

我是MS Access SQL查詢格式的新手。 我已經在MySQL中多次使用這種類型的查詢。 但是我無法從這一結果中獲得預期的結果。

任何幫助,將不勝感激。

在您的示例中,此查詢給出與所有3個條件都匹配的記錄的結果:

SELECT table1.LName, table1.FName, table1.Phone FROM table1 WHERE table1.Phone Like ('*' & Forms!frmSearchMain!Phone & '*') AND table1.LName Like ('*' & Forms!frmSearchMain!LName & '*') AND table1.FName Like ('*' & Forms!frmSearchMain!FName & '*') ORDER BY table1.LName, table1.FName;

如果要返回與(電話)或(FName和LName)匹配的記錄,則必須執行以下操作:

SELECT table1.LName, table1.FName, table1.Phone FROM table1
WHERE  (table1.Phone Like ('*' & Forms!frmSearchMain!Phone & '*'))
OR (table1.LName Like ('*' & Forms!frmSearchMain!LName & '*') AND table1.FName Like ('*' & Forms!frmSearchMain!FName & '*'))
ORDER BY table1.LName, table1.FName;

希望對你有幫助

sql = "SELECT LName, FName, Phone" & _
      "FROM table1" & _
      "WHERE (" & _
      "Phone LIKE ('%" & Forms!frmSearchMain!Phone & "%' )" & _
      "OR ( FName LIKE ('%" & Forms!frmSearchMain!FName & "%' )" & _
            "AND LName LIKE ('%" & Forms!frmSearchMain!LName & "%' ) )" & _
      "ORDER BY LName, FName"

運行該查詢應返回所有具有正確的名字和姓氏的LName,FName,Phone,或正確的電話(或兩者)。

注意:確切地說,我不知道如何正確連接那些多行VBA字符串。

我認為,如果我們簡化一下,應該更容易進行分類。 因此,我現在決定LName忽略LName ,僅基於FNamePhone

在我的版本的frmSearchMain ,我命名保存用於該搜索目標值的文本框FName作為txtSearchFName只是因為我喜歡不同於記錄源字段名的控制。 同樣,我選擇txtSearchPhone作為“ Phone搜索目標文本框。

因為我已經有一個名為Table1 ,所以我tblKeerthiram

有了這些更改,此查詢為我提供了與txtSearchFNametxtSearchPhone匹配的行。 如果txtSearchFNametxtSearchPhone均為Null,則查詢返回表中的所有行...這是我希望您要的。

SELECT
    t1.id,
    t1.FName,
    t1.Phone
FROM tblKeerthiram AS t1
WHERE
           (t1.FName Like "*"
               & [Forms]![frmSearchMain]![txtSearchFName]
               & "*"
        OR [Forms]![frmSearchMain]![txtSearchFName] Is Null)
    AND
           (t1.Phone Like "*"
               & [Forms]![frmSearchMain]![txtSearchPhone]
               & "*"
        OR [Forms]![frmSearchMain]![txtSearchPhone] Is Null)
ORDER BY t1.FName;

這種方法的結果是,如果txtSearchFNametxtSearchPhone都不為Null,則查詢將僅返回匹配兩者的行。 據我了解您的描述,這不是您想要的。 您只想搜索一個或多個,而不要同時搜索。

在這種情況下,建議您在兩個搜索文本框中使用更新后事件,以在其中一個輸入非null值時設置另一個null。 我不確定該句子的清晰程度,因此只需將此代碼添加到表單的模塊中即可。 它將確保兩個文本框之一僅包含非Null值。

Option Compare Database
Option Explicit

Private Sub txtSearchFName_AfterUpdate()
    If Not IsNull(Me.txtSearchFName) Then
        Me.txtSearchPhone = Null
    End If
End Sub

Private Sub txtSearchPhone_AfterUpdate()
    If Not IsNull(Me.txtSearchPhone) Then
        Me.txtSearchFName = Null
    End If
End Sub

最后,如果一切正常,那么您只需對其進行修改即可處理LName 希望那部分不會太艱巨。 祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM