工作中经常要从数据库把数据跑出来放到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的更多相关文章

  1. VBA学习资料分享-1

    近年来,人工智能的概念深入人心,许多企业也正逐步或已推行办公自动化,寻求人力时间成本的降低,从而提升效益.对企业来说,要完全使用人工智能将工作流程自动化恐怕是没那么容易的,可以的话成本也不低,所以使用 ...

  2. VBA学习资料分享-6

    从网上抓取数据到EXCEL中是VBA的一个常用之处,今天分享下VBA网抓的一些套路,主要有以下几种: 第一种:msxml2.xmlhttp/Microsoft.XMLHTTP/WinHttp.WinH ...

  3. VBA学习资料分享-3

    VBA创建/发送OUTLOOK邮件时怎么加上默认签名呢?用过OUTLOOK写邮件的人都知道,如果你设置了默认签名,那么在创建空白邮件的时候就会自动加上你设置的签名.根据这一特性,我们可以在用VBA创建 ...

  4. VBA学习资料分享-2

    想利用VBA自动创建/发送OUTLOOK邮件,可以借助MailItem的Body属性或HTMLBody属性,代码模板如下: Dim objOutlook As Outlook.Application ...

  5. VBA学习资料分享-5

    工作中经常要从数据库把数据跑出来放到EXCEL上,才能进行下一步的操作,那么除了ADO,还有什么方法可以导入数据库数据呢? 推荐使用QueryTable对象 Dim qt As querytable ...

  6. [转]Android 学习资料分享(2015 版)

    转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ...

  7. 学习资料分享:Python能做什么?

    最近一直忙着研究学习Python,很久没更新博客了,整理了一些Python学习资料,和大家分享一下!每天更新一篇~ 一.Python 特点 1.易于学习:Python有相对较少的关键字,结构简单,和一 ...

  8. 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)

    原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...

  9. 近200篇机器学习&深度学习资料分享【转载】

    编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文章的朋友能够学到更多. <Brief History of Machine Le ...

随机推荐

  1. lareval重命名created_at和updated_at字段

    lareval重命名created_at和updated_at字段 一.总结 一句话总结: 要改变created_at和updated_at的名称,模型和数据迁移里面都需要改变 在模型中指定数据类型之 ...

  2. v-if与v-show的区别?

    v-if的显示和隐藏实在dom里创建和消除dom节点 v-show是用css样式的display来控制dom节点的显示和隐藏 相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染 ...

  3. git如何压栈某一个文件?

    答: 使用git stash -p进行交互式操作,y表示压栈,n表示不压栈

  4. ubuntu 切换默认python版本

    现在的python项目都是基于python3的了,再用ubuntu的时候默认的版本是py2的,所以想切换到py3上: 打开终端: sudo update-alternatives --install ...

  5. C之数组

    1. 数组的地址就是数组里元素的首地址 2. 数组其实就是一块连续的内存空间 3. 每个元素所占大小取决于数组的类型 4. 所有指针变量在内存中的长度是一样的

  6. PHP + Smarty + MySQL

    Help me please! How to transfer data from table to smarty? Function: public function getBanLog() { g ...

  7. 安装SQL server 提示重新启动计算机失败

    SQL Server2008是一款功能强大.实用性强的mysql数据库管理系统,因此很多用户都会在Win7系统中安装SQL Server2008,但是不少用户在安装过程中遇到问题,安装SQL Serv ...

  8. java批量修改指定目录下的文件名

    package io; import java.io.File; import java.io.IOException; /** * @Auther: Code * @Date: 2018/9/9 1 ...

  9. Python实现的选择排序算法原理与用法实例分析

    Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...

  10. php 转化整型需要注意的地方

    public function tt(){ $num = '19.90'; echo $num; echo '<br/>--------------<br/>'; echo 1 ...