![70f06bdf424611084f1cc097d7ba6836.png](https://i-blog.csdnimg.cn/blog_migrate/0344d6043ead1efbdc6de3967cb47427.jpeg)
大家好,我们继续讲解VBA数据库解决方案,今日讲解第54讲内容:工作表查询时,固定长度字符和多个起始字符汇总查询功能的实现。在上一讲的内容中,我们讲了类似于筛选功能的实现,今日内容和上讲比较复杂些,其一是固定长度的字符筛选,也就是说筛选的是具有固定长度的符号;其二,多个起始字符的查询,是指多个开始符号的字符。这种功能在工作表中是无法直接实现的,那么在ADO中是否可以实现呢?实例,我们有如下的数据:
![3ae13d9cd3e6e0fd29e5edb4d15da43e.png](https://i-blog.csdnimg.cn/blog_migrate/865409f610c91d69f2258f77d5097bca.png)
我们要得到的结果是生产厂具有5个字符的数据和以A,B,C,D开始的生产厂家数据,我们看代码该如何书写.下面看我给出的代码:
Sub mynzRecords_54() '第54讲 工作表查询时,固定长度字符和多个起始字符汇总查询功能的实现
Dim cnADO, rsADO As Object
Dim strPath, strSQL3, strSQL4 As String
Worksheets("54").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
'固定长度字符
strSQL3 = "select 型号,生产厂,供应商,数量 from [数据$] WHERE 生产厂 Like '_____'" '此处是5个字符长度
arr = Array("型号", "生产厂", "供应商", "数量")
[a1:d1] = arr
[a65536].End(xlUp).Offset(1, 0).CopyFromRecordset cnADO.Execute(strSQL3)
'多个起始字符汇总查询
strSQL4 = "select 型号,生产厂,供应商,数量 from [数据$] WHERE 生产厂 Like '[A,B,C,D]%'" '此处也可以用[A-D]% 的格式
[a65536].End(xlUp).Offset(2, 0).CopyFromRecordset cnADO.Execute(strSQL4)
cnADO.Close
Set cnADO = Nothing
End Sub
代码截图:
![08dc1a5278a1ea6d0a718adb904244ee.png](https://i-blog.csdnimg.cn/blog_migrate/ca9a7a5fd5adea1018bb1a7ef5cfabeb.jpeg)
代码的讲解:
1 strSQL3 = "select 型号,生产厂,供应商,数量 from [数据$] WHERE 生产厂 Like '_____'" '此处是5个字符长度
此句的SQL语句是实现5个字符长度的生产厂的查询,注意如果是以某字符开始的同样也可以把这个字符加到首位。
2 strSQL4 = "select 型号,生产厂,供应商,数量 from [数据$] WHERE 生产厂 Like '[A,B,C,D]%'" '此处也可以用[A-D]% 的格式。
此句的SQL语句是实现以A,B,C,D 开始的字符匹配查找,同样如果不是以A,B,C,D 开始的字符匹配查找,可以在前面加上NOT.
下面看代码的运行:
![7f21b06d24541942854f8e97800098ed.png](https://i-blog.csdnimg.cn/blog_migrate/cb15accdb2218ec4463d1e3837db346c.png)
![5d0b76d25e849d52a648aedcbd8fdfbb.png](https://i-blog.csdnimg.cn/blog_migrate/897e11aac1d6b992d5bd88dea4f47695.png)
今日内容回向:
1 如何实现固定长度字符和多个起始字符汇总查询功能?
2 上述在代码讲解中我讲了两个扩展内容,读者可以自己测试。