vba mysql select_VBA数据库解决方案:对Recordset记录集合动态查询,并显示结果

本文介绍如何在VBA中使用Execute方法动态执行SQL查询,从MySQL数据库获取数据,并将结果展示在Excel工作表中。示例代码演示了如何根据I2单元格的值查询"职员表"中特定部门的信息,清空目标区域,然后填充查询结果。
摘要由CSDN通过智能技术生成

大家好,今日继续讲解VBA与数据库解决方案的第10讲内容,打开一个指定的数据库记录集,把所得的数据显示到工作表中的方法。今日的内容是和第8讲,第9讲内容是相连续,在第9讲中讲了打开记录集的用的方法是rsADO.Open strSQL, cnADO, 1, 3,在第8讲中我们讲了还有一种是Execute(strSQL)方法,今日我们就讲利用这种方法达到我们的目的,同时在SQL语句中的我们将查询设置为一个动态的查询。

如下面的工作表文件:我们要根据I2单元格的提示部门信息来查找工作表的数据并将查询的结果放在左侧的区域:

f64386d8de66ec35cf6c9eccb03df7f6.png

我们看代码:

Sub mynzra2()

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)

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

代码截图:

2d17651011b25d73b3d642530cba2f08.png

代码精讲:

① 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语句:

9b0ebf670e20e87cf8e371e19f0dfbea.png

④ 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]

参数a RecordAffected为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。

参数b Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效

在第9讲的讲解中,我们用了第二种方法,今日的代码有的是第一种代码。至于那种好,我这里没有说明,可以根据写代码人员的喜好即可。

代码的运行结果:

bbbdc7d5181a95e183b181e9ddeb90bb.png

今日内容回向:

1 Connection对象的Execute方法有哪两种方法?

2 如何实现可控的指定查询?并将结果显示?

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值