[英]VB Form and MS Access SQL Wildcard Search
我的表table1有3個字段: FName
, LName
, Phone
。 我正在使用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;
它為我提供了一個與給定( FName
和LName
)參數匹配的用戶列表。 工作正常。
同樣,當我嘗試:
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;
它沒有給我預期的結果。
我什至嘗試了( FName
和LName
)和( 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
,僅基於FName
或Phone
。
在我的版本的frmSearchMain
,我命名保存用於該搜索目標值的文本框FName
作為txtSearchFName
只是因為我喜歡不同於記錄源字段名的控制。 同樣,我選擇txtSearchPhone
作為“ Phone
搜索目標文本框。
因為我已經有一個名為Table1
,所以我tblKeerthiram
。
有了這些更改,此查詢為我提供了與txtSearchFName
或txtSearchPhone
匹配的行。 如果txtSearchFName
和txtSearchPhone
均為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;
這種方法的結果是,如果txtSearchFName
和txtSearchPhone
都不為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.