Sql 在多个列中搜索
我有一个access数据库,在VBA和ADODB的帮助下从excel中搜索 它工作得非常好,但我一次只能搜索一件东西。假设我要搜索第[1]列中“first name”的所有实例,该实例在第[2]列中也有“last name”。或在第[1]栏中填写“姓名”,在第[3]栏中填写“地址” 我将如何从用户表单上的文本框中执行该操作 我在考虑以某种方式添加“Firstname+Lastname”之类的东西,但我无法理解代码的逻辑。有什么建议吗 这就是我现在所拥有的Sql 在多个列中搜索,sql,excel,vba,adodb,Sql,Excel,Vba,Adodb,我有一个access数据库,在VBA和ADODB的帮助下从excel中搜索 它工作得非常好,但我一次只能搜索一件东西。假设我要搜索第[1]列中“first name”的所有实例,该实例在第[2]列中也有“last name”。或在第[1]栏中填写“姓名”,在第[3]栏中填写“地址” 我将如何从用户表单上的文本框中执行该操作 我在考虑以某种方式添加“Firstname+Lastname”之类的东西,但我无法理解代码的逻辑。有什么建议吗 这就是我现在所拥有的 Private Sub cmd_look
Private Sub cmd_lookup_Click()
Dim cn As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection")
Set sqlConnect = New ADODB.Connection
Set rs = CreateObject("ADODB.RecordSet")
sqlConnect.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Source\database.accdb;Persist Security Info=False;"
cn.Open sqlConnect
rs.ActiveConnection = cn
SearchCriteria = "%" & searchCrit.Text & "%"
rs.Open "SELECT [1],[2] ,[3],[4], [5] FROM [tblDatabase]" & _
"WHERE [1] LIKE '" & SearchCriteria & "' " & _
" OR [2] LIKE '" & SearchCriteria & "' " & _
" OR [3] LIKE '" & SearchCriteria & "' " & _
" OR [4] LIKE '" & SearchCriteria & "' " & _
" OR [5] LIKE '" & SearchCriteria & "' " & _
"ORDER BY [2] Desc;", _
cn, adOpenStatic
Dim i As Integer
If Not rs.EOF Then
rs.MoveFirst
i = 0
With lstLookup
'Code not relevant
End With
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End If
End Sub
感谢您的建议:)考虑由
或运算符分隔的和配对。但首先要使用单独的文本字段构造userform(每个字段都必须是必填字段,否则必须动态构建WHERE
子句):
然后将标准绑定在一起。此外,出于调试原因,我不建议使用编号但命名的字段:
rs.Open“选择[1]、[2]、[3]、[4]、[5]”和_
“来自[tblDatabase]”和_
其中([1]类似“%”和FirstNameSearch&“%”和_
“和[2]类似“%”和LastNameSearch&“%”)_
或([1]类似“%”和FirstNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
或([2]类似“%”和LastNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
“由[2]描述的命令;”_
cn,adOpenStatic
或者,在SQL世界中尽可能多地使用联合查询,以提高效率。为了真正等效,应该在上面添加一个
不同的
,以便两者删除重复项
rs.Open“选择[1]、[2]、[3]、[4]、[5]”和_
“来自[tblDatabase]”和_
其中([1]类似“%”和FirstNameSearch&“%”和_
“和[2]类似“%”和LastNameSearch&“%”)_
“工会”_
“选择[1]、[2]、[3]、[4]、[5]”&_
“来自[tblDatabase]”和_
其中([1]类似“%”和FirstNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
“工会”_
“选择[1]、[2]、[3]、[4]、[5]”&_
“来自[tblDatabase]”和_
其中([2]类似“%”和LastNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
“由[2]描述的命令;”_
cn,adOpenStatic
考虑由或
运算符分隔的和
配对。但首先要使用单独的文本字段构造userform(每个字段都必须是必填字段,否则必须动态构建WHERE
子句):
然后将标准绑定在一起。此外,出于调试原因,我不建议使用编号但命名的字段:
rs.Open“选择[1]、[2]、[3]、[4]、[5]”和_
“来自[tblDatabase]”和_
其中([1]类似“%”和FirstNameSearch&“%”和_
“和[2]类似“%”和LastNameSearch&“%”)_
或([1]类似“%”和FirstNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
或([2]类似“%”和LastNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
“由[2]描述的命令;”_
cn,adOpenStatic
或者,在SQL世界中尽可能多地使用联合查询,以提高效率。为了真正等效,应该在上面添加一个
不同的
,以便两者删除重复项
rs.Open“选择[1]、[2]、[3]、[4]、[5]”和_
“来自[tblDatabase]”和_
其中([1]类似“%”和FirstNameSearch&“%”和_
“和[2]类似“%”和LastNameSearch&“%”)_
“工会”_
“选择[1]、[2]、[3]、[4]、[5]”&_
“来自[tblDatabase]”和_
其中([1]类似“%”和FirstNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
“工会”_
“选择[1]、[2]、[3]、[4]、[5]”&_
“来自[tblDatabase]”和_
其中([2]类似“%”和LastNameSearch&“%”和_
“和[3]类似“%”和“%”地址搜索&“%”)_
“由[2]描述的命令;”_
cn,adOpenStatic
有很多方法可以做到这一点。我倾向于使用userform让用户输入要查询的信息。然后,将这些输入保存为变量。它需要一些条件逻辑(即If..End If
或Select…Case
)来省略任何空白。在不知道所需输出的情况下很难具体地告诉您。您可以动态地构建where语句,包括切换或to以及何时查找两者。复杂的是gui和参数,以确定何时使用and或or等。但您可以使用下拉列表或and/or复选框,然后在构建SQL语句时仅使用该值。表单上是否有多个输入框?例如,如果您有三个框,您可以让他们填写这些框,然后您只需在查询中附加一个带有这些值的和语句。如果框为空,您可以插入通配符而不是空字符串。我只有一个文本框,希望保持这种状态。我想我会根据搜索条件中“+”号的数量将搜索字符串拆分为一个数组。然后我必须找出如何同时在多个列中搜索两个不同的条件。有很多方法可以做到这一点。我倾向于使用userform让用户输入要查询的信息。然后,将这些输入保存为变量。它需要一些条件逻辑(即If..End If
或Select…Case
)来省略任何空白。在不知道所需输出的情况下很难具体地告诉您。您可以动态地构建where语句,包括切换或to以及何时查找两者。复杂的是图形用户界面和参数,以确定何时使用和或等等
First Name Search:_____________
Last Name Search: _____________
Address Search: _______________