前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ExcelVBA-ADO-SQL-003多条件组合查询(模糊查询)

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

作者头像
哆哆Excel
发布2022-10-25 14:21:15
2.6K0
发布2022-10-25 14:21:15
举报
文章被收录于专栏:哆哆Excel

前面学习了:单条件查询

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 '%3478%'"
   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.=====

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档