前面学习了:单条件查询
VBA-ADO-SQL-002单条件查询语句
今天来学习多条件查询
也有模糊查询的知识点
==========================
ExcelVBA-ADO-SQL-003多条件组合查询(模糊查询)语句
【问题】前提设定:
假如现在有一个提交表单,里面是N个查询的条件(工号、姓名、性别、年龄、部门、工资、奖金)用户可以只填写其中的几个条件来进行查询。(也可以不填写条件)
【解决思想】:
1. 判断用户填入的条件参数不为null以及除去空格不为空,满足该条件后,使用sql语句拼凑。
2.解决:首先给出sql 语句前半句
strSQL = "SELECT * FROM [数据源$] WHERE 1=1"
后面的 where 1=1 是一个始终成立的条件,是为了防止用户一个条件也没有填,那么就是查询所有
3.即使只有sql语句的前半段,也不会出现问题,再给出sql语句的后半段(后半段的存在就说明了用户填写了1~N个条件)
我们只需将这些条件拼凑起来即可!
【代码】
代码语言:javascript复制Sub myMultiFindData()
Dim cnn As Object, rst As Object
Dim strPath As String, str_cnn As String ', 'strWhere As String
Dim i As Long, j As Long
Set cnn = CreateObject("adodb.connection")
strPath = ThisWorkbook.FullName
If Application.Version < 12 Then
str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;ExtendedProperties=Excel 8.0;Data Source=" & strPath
Else
str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;ExtendedProperties=Excel 12.0;Data Source=" & strPath
End If
cnn.Open str_cnn
'先给出前半段查询语句,有where 1=1
strSQL = "SELECT * FROM [数据源$] WHERE 1=1" '========AND 工资 LIKE '478%'"
With Sheets("多条件查询")
.Range("A5:G10000").Clear '清除原数据
For i = 1 To 7
If Len(.Cells(2, i).Value) <> 0 Then
strSQL = strSQL & "AND " & .Cells(1, i).Value & " LIKE '%" & .Cells(2,i).Value & "%'"
End If
Next i
End With
MsgBox "准备查询" & Chr(13) &strSQL
Set rst = cnn.Execute(strSQL)
'cnn.Execute()执行strSQL语句
If rst.EOF Then
MsgBox "没有找到数据"
Exit Sub
Else
With Sheets("多条件查询")
.Range("a5").CopyFromRecordset rst
.Range("A4:G" & .Cells(Rows.Count,1).End(xlUp).Row).HorizontalAlignment = xlCenter
.Range("A4:G" & .Cells(Rows.Count,1).End(xlUp).Row).Borders.LineStyle = xlContinuous
End With
End If
cnn.Close '关闭链接
Set cnn = Nothing '释放内存
End Sub
【运行成功】
====测试1.=====
====测试2.=====
====测试3.=====
====测试4.=====
====今天学习到此====