【分享成果,随喜正能量】人都是被逼出来的,人的潜能是无限的,安于现状,你将逐步被淘汰,逼自己一把,突破自我,你将创造奇迹,千万不要对自己说“不可能”,树的方向,风决定。人的方向,自己决定。
《VBA数据库解决方案》教程是我推出第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第10讲:Recordset记录集的动态查询。
第十讲 Recordset记录集合的动态查询,并显示结果
大家好,今日继续讲解VBA数据库解决方案的第10讲内容,打开一个指定的数据库记录集,把所得的数据显示到工作表中的方法。今日的内容是和第8讲,第9讲内容是相连续,在第9讲中讲了打开记录集的用的方法是rsADO.Open strSQL, cnADO, 1, 3,在第8讲中我们讲了还有一种是Execute(strSQL)方法,今日我们就讲利用这种方法达到我们的目的,同时在SQL语句中的我们将查询设置为一个动态的查询。
1 应用场景的具体分析
如下面的工作表文件:我们要根据I2单元格的提示部门信息来查找数据表中的数据并将查询的结果放在左侧的区域:
2 Execute(strSQL)方法实现查询的代码及代码分析
我们看代码:
Sub mynz_10() '第10讲,打开一个指定的数据库记录集,把所得的数据显示到工作表中的方法
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim i As Integer
strPath = ThisWorkbook.Path & "\mydata.accdb"
Set cnADO = CreateObject("ADODB.Connection")
With cnADO
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open strPath
End With
strSQL = "SELECT * FROM 职员表 WHERE 部门='" & Cells(2, 9) & " '"
Set rsADO = cnADO.Execute(strSQL)
Sheets("10").Select
Columns("A:E").Select
Selection.ClearContents
Cells(2, 9).Select
For i = 0 To rsADO.Fields.Count - 1
Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
Range("A2").CopyFromRecordset rsADO
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
代码解读:
① Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim i As Integer
strPath = ThisWorkbook.Path & "\mydata.accdb"
Set cnADO = CreateObject("ADODB.Connection")
上面的代码和第9讲的相同,分别声明了几个变量并建立了数据库的ADO连接,
② 在打开数据库时同时设置了连接:
With cnADO
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open strPath
End With
这种连接方式采用了我在第8讲中讲到另外的方式,可以参考一下。
③strSQL = "SELECT * FROM 职员表 WHERE 部门= '" & Cells(2, 9) & " '"
我们要重点的讲解一下这条语句,之前有朋友联络问过这类语句的书写方式,今日可以一并回答,这里要注意变量,变量是代码中的变量,在SQL语句中是不能出现变量的,要是常量并用引号括起来,所以在上面的语句中
a "SELECT * FROM 职员表 WHERE 部门= '" 为第一部分
b 最后的 " '"为第三部分
c Cells(2, 9)为第二部分。
三个部分中间用“&”连接起来。大家要务必记住这种书写的方式,这样在程序的运行中SQL语句才正确,下面看看在运行过程中的SQL语句:
④ Set rsADO = cnADO.Execute(strSQL) 对于这条语句,我在第8讲的内容中,也讲到是一种打开记录集的方式之一,是Connection对象的Execute方法,通过上面语句,我们就可以执行查询,并将结果保存到集合的对象中。
下面我将Connection对象的Execute方法再次专门的讲解一下:
ADODB.Connection对象的Execute方法:
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
- 第一种:执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set对象变量名=连接对象.Execute("SQL语句")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
- 第二种:执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL语句" [,RecordAffected][, Option]
参数 RecordAffected为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
参数 Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效
在第9讲的讲解中,我们用了第二种方法,今日的代码用的是第一种代码。至于那种好,我这里没有说明,可以根据写代码人员的喜好即可。
代码的运行结果:
今日内容回向:
1 Connection对象的Execute方法有哪两种方法?
2 如何实现可控的指定查询?并将结果显示?
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解
第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程
第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)
第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解
第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解
第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用
第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解
第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用
上述教程的学习顺序:
① 7→1→3→2→6→5或者7→4→3→2→6→5。
② 7→8
- 如何学习VBA呢? 概括的说就是: 学习过程中要信、解、受、持,更要有回向的业力。无论您在学习的任何阶段,都要对照教程的知识点加持自己的实际工作,总会有丰厚的收获。