ExcelVBA-ADO-SQL-003多条件组合查询(模糊查询)

2022-10-25 14:21:15 浏览数 (1)

前面学习了:单条件查询

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.=====

====今天学习到此====

0 人点赞