Sql 在多个列中搜索

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

我有一个access数据库,在VBA和ADODB的帮助下从excel中搜索

它工作得非常好,但我一次只能搜索一件东西。假设我要搜索第[1]列中“first name”的所有实例,该实例在第[2]列中也有“last name”。或在第[1]栏中填写“姓名”,在第[3]栏中填写“地址”

我将如何从用户表单上的文本框中执行该操作

我在考虑以某种方式添加“Firstname+Lastname”之类的东西,但我无法理解代码的逻辑。有什么建议吗

这就是我现在所拥有的

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: _______________