ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 955|回复: 6

初学者请教VBA的SQL问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-24 16:34 | 显示全部楼层 |阅读模式
网上找了很多教程,也请教了同事。
但是目前对于VBA写入SQL并不太熟悉,特此发帖请教一下。

Sub SQL练习()
       Dim cnn As Object
       Dim SQL1 As Variant
       Dim Rst1 As Object
       SQL1 = "SELECT * FROM [数据源$]"
       Set cnn = CreateObject("adodb.connection")
       cnn.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.FullName
       Set RST1 = cnn.Execute(SQL1)
       Worksheets("sheet2").Range("A1").CopyFromRecordset RST1
       Set cnn = Nothing
       cnn.Close
END SUB

上述这段VBA中有以下几点不明白的地方。
【1】Set cnn = CreateObject("adodb.connection")
这段代码中  CreateObject("adodb.connection") 所表达的意思是?

【2】cnn.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.FullName
这段代码中,三个参数【Provider】、【Extended Properties】、【Source】分别代表的是什么意思?

【3】Set RST1 = cnn.Execute(SQL1)
这段代码所表达的意思是?

【4】Set cnn = Nothing和cnn.Close
为何结尾处需要申明cnn = Nothing 和进行Close操作?

【5】代码执行错误
在其它场景使用上述代码并修改参数,出现提示
【运行时错误 ‘-2147467259(80004005)’ 自动化(Automation)错误】
这种情况下是哪个位置的参数出错?

以上几点感谢各位的解答,谢谢。

TA的精华主题

TA的得分主题

发表于 2019-9-24 21:22 来自手机 | 显示全部楼层
这些属于基础知识,百度一下就有了,我没学过vba中用sql,最后你说的两个是用关闭数组或rng用来节约内存的

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-25 14:44 | 显示全部楼层
dgenson 发表于 2019-9-24 21:22
这些属于基础知识,百度一下就有了,我没学过vba中用sql,最后你说的两个是用关闭数组或rng用来节约内存的

上述问题也有查过百度,但是不是特别确定答案。所以想请教一下。
但是第5个问题不确定问题发生的所在,所以发帖请教下各位。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-26 17:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-28 22:34 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Provider是Connection 对象提供者名称的字符串值,03版Excel是“Microsoft.jet.OLEDB.4.0”,其它版本可以使用“Microsoft.ACE.OLEDB.12.0”;


Extended Properties是Excel版本号及其它相关信息,03版本是Excel 8.0,其它版本可以使用Excel 12.0。


其中HDR项是引用工作表是否有标题行,默认值HDR=Yes,意思是引用表的第一行是标题行,标题只能一行,不能多行,亦不能存在合并单元格。HDR=no,意思是引用表不存在标题行,也就是说第一行开始就是数据记录了;此时,相关字段名在SQL语句中可以使用f加序列号表示,第1列字段名是f1,第2列字段名是f2,其余以此类推,f是英文field(字段)的缩写。


IMEX项是汇入模式,默认为0(只读模式),1是只写,2是可读写。当参数设置为1时,除了只写,还有默认全部记录数据类型为文本的用途,关于这一点及其限制前提我们以后再谈。


Data Source是数据来源工作薄的完整路径。
【1】后期绑定
【2】Excel版本
【3】把SQL的记录集,赋值给 RST1
【4】释放内存


TA的精华主题

TA的得分主题

发表于 2019-9-28 22:41 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-29 10:09 | 显示全部楼层
醉清心 发表于 2019-9-28 22:34
Provider是Connection 对象提供者名称的字符串值,03版Excel是“Microsoft.jet.OLEDB.4.0”,其它版本可以 ...

解释的很清晰,感谢帮忙。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-29 09:11 , Processed in 0.028959 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表