【发布时间】:2016-09-09 16:19:59
【问题描述】:
我有一个访问数据库,我在 VBA 和 ADODB 的帮助下从 excel 中搜索。
它工作得很好,但我一次只能搜索一件事。假设我想在列 [1] 中搜索“名字”的所有实例,并且在列 [2] 中也有“姓氏”。或者,列 [1] 中的“名字”和列 [3] 中的“地址”。
我将如何从用户窗体上的文本框中执行此操作?
我正在考虑以某种方式添加“名字+姓氏”或其他内容,但我无法弄清楚代码的逻辑。有什么建议吗?
这就是我现在所拥有的。
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
感谢您的建议:)
【问题讨论】:
-
有很多方法可以做到这一点。我倾向于使用用户表单让用户输入信息进行查询。然后,将这些输入保存为变量。它将需要一些条件逻辑(即
If..End If或Select...Case)以省略任何空白。在不知道所需输出的情况下很难具体告诉您。 -
您可以动态构建您的 where 语句,包括在您想要同时找到两者时将 OR 切换为 AND。复杂之处在于识别何时是 AND 或 OR 等的 gui 和参数,但您可以使用下拉列表或复选框进行 AND/OR,然后在构建 SQL 语句时使用该值
-
表单上有多个输入框吗?例如,如果您有三个框,您可以让它们填写它们,然后您只需在带有这些值的查询上附加一个
AND语句。如果框为空白,您可以插入通配符而不是空字符串。 -
我只有一个文本框,想保留它。
-
我想我会根据搜索条件中“+”号的数量将搜索字符串拆分为一个数组。然后我必须弄清楚如何同时在几列中搜索两个不同的条件。