VBA学习资料分享-4
工作中经常要从数据库把数据跑出来放到EXCEL上,才能进行下一步的操作,那么VBA如何结合SQL提取数据呢?答案就是ADO。
声明和实例变量
引用法——引用Microsoft ActiveX Data Objects x.x Library,Microsoft ActiveX Data Objects Recordset x.x Library,声明的同时使用New实现了初始实例化
Dim conn as New Connection
Dim rre as New Recordset
创建法——使用createobject函数创建
Dim conn as object
Dim rre as object
Set conn=CreateObject("adodb.connection")
Set rre=CreateObject("adodb.recordset")
设置连接属性
conn.ConnectionTimeout = '指示在终止尝试和产生错误前建立连接期间所等待的时间。
conn.CommandTimeout = '指示在终止尝试和产生错误之前执行命令期间需等待的时间。
connstr = "Provider = SQLOLEDB;Server = XXXXX;Trusted_Connection=yes" '无需密码时的连接
connstr = "Provider = SQLOLEDB;Data Source = XXXXX;Initial Catalog = XXXXX;User ID =XXXXX;Password = XXXXX;" '需要密码时的连接
conn.ConnectionString = connstr
执行SQL语句
conn.Open
Sql = "select * from ......"
Set rre = conn.Execute(Sql)
'rre.Open Sql, conn, adOpenKeyset, adLockOptimistic '另一种用法
'多条SQL语句可以分句执行
Sql0="Use DataBase"
Sql1="IF object_id('tempdb.dbo.#t1') is not null drop table #t1"
Sql2="alter table #t1 add ......"
Sql3="update #t1 set ......"
Sql4="select * from ......"
Set rre = conn.Execute(Sql0)
Set rre = conn.Execute(Sql1)
Set rre = conn.Execute(Sql2)
Set rre = conn.Execute(Sql3)
Set rre = conn.Execute(Sql4)
读写查询结果
if rre.RecordCount= then '判断结果是否为空
Msgbox "没有查到任何数据"
exit sub
end if
For i = To rre.Fields.Count - '循环读写字段名
ThisWorkbook.Sheets().Cells(,i+) = rre.Fields(i).Name
Next
ThisWorkbook.Sheets().Range("A2").CopyFromRecordset rre '批量读写结果
r=
While Not rre.EOF '循环读写结果
For i = To rre.Fields.Count -
Sheet1.Cells(r, i + ) = rre.Fields(i).Value
Next i
r = r +
rre.MoveNext
Wend
关闭缓存和释放内存
rre.Close
conn.Close
set rre=Nothing
set conn=Nothing
如果是调用存储过程而不是直接执行SQL语句的,可以这么写:
Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
conn.Open "Provider=SQLOLEDB;Data Source=XXXXX;Initial Catalog=XXXXX;User Id=XXXXX;Password=XXXXX"
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dbo.XXXXX"
cmd.CommandTimeout =
cmd.ActiveConnection = conn
rst.Open cmd, , adOpenForwardOnly, adLockReadOnly
ThisWorkbook.Sheets().Range("a2").CopyFromRecordset rst
rst.Close
conn.Close
Set rst = Nothing
Set conn = Nothing
Set cmd = Nothing
VBA学习资料分享-4的更多相关文章
- VBA学习资料分享-1
近年来,人工智能的概念深入人心,许多企业也正逐步或已推行办公自动化,寻求人力时间成本的降低,从而提升效益.对企业来说,要完全使用人工智能将工作流程自动化恐怕是没那么容易的,可以的话成本也不低,所以使用 ...
- VBA学习资料分享-6
从网上抓取数据到EXCEL中是VBA的一个常用之处,今天分享下VBA网抓的一些套路,主要有以下几种: 第一种:msxml2.xmlhttp/Microsoft.XMLHTTP/WinHttp.WinH ...
- VBA学习资料分享-3
VBA创建/发送OUTLOOK邮件时怎么加上默认签名呢?用过OUTLOOK写邮件的人都知道,如果你设置了默认签名,那么在创建空白邮件的时候就会自动加上你设置的签名.根据这一特性,我们可以在用VBA创建 ...
- VBA学习资料分享-2
想利用VBA自动创建/发送OUTLOOK邮件,可以借助MailItem的Body属性或HTMLBody属性,代码模板如下: Dim objOutlook As Outlook.Application ...
- VBA学习资料分享-5
工作中经常要从数据库把数据跑出来放到EXCEL上,才能进行下一步的操作,那么除了ADO,还有什么方法可以导入数据库数据呢? 推荐使用QueryTable对象 Dim qt As querytable ...
- [转]Android 学习资料分享(2015 版)
转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ...
- 学习资料分享:Python能做什么?
最近一直忙着研究学习Python,很久没更新博客了,整理了一些Python学习资料,和大家分享一下!每天更新一篇~ 一.Python 特点 1.易于学习:Python有相对较少的关键字,结构简单,和一 ...
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)
原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...
- 近200篇机器学习&深度学习资料分享【转载】
编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文章的朋友能够学到更多. <Brief History of Machine Le ...
随机推荐
- windows下安装node.js及环境配置、部署项目
windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...
- Flutter移动电商实战 --(28)列表页_商品列表后台接口调试
主要调试商品列表页的接口 这个接口是最难的因为有大类.小类还有上拉加载 先配置接口 config/service_url.dart //const serviceUrl='http://test.ba ...
- 用jeecg做个项目第三讲(自定义导入导出)
1.导入 前端js和跳转页面 <t:dgToolBar title="导入单一模板" icon="icon-put" funname="Impo ...
- react native Expo适配全面屏/Expo识别全面屏和正常屏
一.最新版本的expo已经默认支持了全面屏,即不会像react native cli一样出现底部黑边 二.但是全面屏通过Dimensions.get('window')获取的高度还是不准确,因为全面屏 ...
- kvm管理工具Webvirtmgr安装
虚拟机版本vmware workstation 15.5.0 pro (也就是linux版) cat /etc/redhat-release CentOS Linux release 7.4.17 ...
- mac 终端杀进程
killall 进程名 killall chromedriver 查看进程名的·方法:
- ubuntu 18.04设置开机自动挂载移动硬盘
首先在命令行执行df -h指令,可以看到如下结果: zifeiy@zifeiy-PC1:~$ df -h 文件系统 容量 已用 可用 已用% 挂载点 udev 964M 0 964M 0% /dev ...
- 《精通并发与Netty》学习笔记(08 - netty4+springboot项目案例)
本节通过案例介绍springboot与netty的集成 第一步:新建Spring Initializr 项目 我这里选择Gradle项目,也可选择Maven项目 (注意:最好选择自己下载gradle, ...
- 【ARM-Linux开发】arm-none-Linux-gnueabi-gcc下载安装
arm-none-Linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括 ...
- 【VS开发】malloc申请内存错误分析
每个进程会有4G的虚拟地址空间, malloc得到的的地址都是虚拟地址, 并且当malloc的时候, 操作系统并不会将实际的内存分配给进程的, 所以malloc只会占用进程自身的虚拟地址空间.我以前也 ...