HI,大家好,我是星光。
1
ADO是什么
2
怎么引用ADO
Sub LateWife()
Dim cnn As Object
Set cnn = CreateObject("adodb.connection")
End Sub
两种方式的主要区别是:前期绑定后,在代码编辑过程中,VBE支持“自动列出成员”功能,可以自动提供ADO的属性和方法,这便于代码准确快捷的编写,但当他人的Excel工作簿并没有手工前期绑定ADO类库时,相关代码将无法运行;而后期绑定的话,在代码编写过程中,VBA不提供“自动列出成员”功能,但代码复制即可使用。因此后期代码绑定ADO的通用性会更强些。
connection.Open ConnectionString, UserID, Password, Options
Sub MyCnn()
Dim cnn As Object '定义变量
Set cnn = CreateObject("adodb.connection") '后期绑定ADO
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes;IMEX=0';Data Source=" & ThisWorkbook.FullName
'建立链接
cnn.Close '关闭链接
Set cnn = Nothing '释放内存
End Sub
说一下上面代码连接字符串中各关键字(第4行代码)的意思。
Sub Mycnn2()
Dim cnn As Object
Dim strPath As String
Dim str_cnn As String
Set cnn = CreateObject("adodb.connection")
strPath = ThisWorkbook.FullName '当前工作簿的完整路径
If Application.Version < 12 Then '判断Excel版本号,以使用不同的连接字符串
str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & strPath
Else
str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath
End If
str_cnn
cnn.Close
Set cnn = Nothing
End Sub
最后,需要提醒大家的是,链接是一种昂贵的资源(官方语),因此在代码运行完毕后,请养成关闭链接(cnn.Close)并释放内存(Set cnn = Nothing)的好习惯。
3
ADO怎么用
代码看不全可以左右拖动..▼
Sub DoSql_Execute()
Dim cnn As Object, rst As Object
Dim strPath As String, str_cnn As String, strSQL As String
Dim i As Long
Set cnn = CreateObject("adodb.connection")
'以上是第一步,后期绑定ADO
'
strPath = ThisWorkbook.FullName
If Application.Version < 12 Then
str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & strPath
Else
str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath
End If
cnn.Open str_cnn
'以上是第二步,建立链接
'
strSQL = "SELECT 姓名,成绩 FROM [Sheet1$] WHERE 成绩>=80"
'Sql语句,查询Sheet1表成绩大于80……姓名和成绩的记录
Set rst = cnn.Execute(strSQL)
'Execute()执行SQL语句,始终得到一个新的记录集rst
'以上是第三步,编写并执行SQL
'
Worksheets("结果表").Select '选中存放结果的工作表
Cells.ClearContents '清空值
For i = 0 To rst.Fields.Count - 1
'利用fields属性获取所有字段名,fields包含了当前记录有关的所有字段,fields.count得到字段的数量
'由于Fields.Count下标为0,又从0开始遍历,因此总数-1
Cells(1, i + 1) = rst.Fields(i).Name
Next
Range("a2").CopyFromRecordset rst
'使用单元格对象的CopyFromRecordset方法将rst内容复制到D2单元格为左上角的单元格区域
'以上是第四步,将SQL查询结果和字段名写入表格指定区域
'
cnn.Close '关闭链接
Set cnn = Nothing '释放内存
End Sub
示例文件下载,百度网盘▼
https://pan.baidu.com/s/1CrquOygTiRuHh185l4-cxA
提取码: 9y67
⏩需要系统学习Excel,却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?
加入我的付费社群,学习+训练+答疑,与6000+在线会员一起,同微软最有价值专家MVP同行,全面精进Excel之道
🚂>>~
加入我的付费会员,全面学习Excel
透视表 函数 图表 VBA PQ想学啥学啥
👀