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 ...
随机推荐
- Sublime 添加∕删除右键菜单.bat
Sublime 添加∕删除右键菜单.bat @ECHO OFF & PUSHD %~DP0 & TITLE >NUL 2>&1 REG.exe query &quo ...
- C++ STL 排序查找最大的5个
#include <iostream>#include <algorithm>#include <deque>#include <vector>#inc ...
- 在Mac 搭建robotframework 环境
折腾来一下午,遇到了好多坑 坑 1.不要用pip 下载wxpython 2.不要用mac自带的python 3.不要自己下载wxpython 步骤: 1. 安装homebrew, /usr/bin/r ...
- scikit-learn机器学习(三)多项式回归(二阶,三阶,九阶)
我们仍然使用披萨直径的价格的数据 import matplotlib matplotlib.rcParams['font.sans-serif']=[u'simHei'] matplotlib.rcP ...
- [!] The version of CocoaPods used to generate the lockfile (1.4.0.beta.1) is higher than the version of the current executable (1.3.0.beta.1). Incompatibility issues may arise.
今天在看一个开源Demo代码的时候,需要执行pod install命令,直接报错如下: 解决方法: 执行:pod update 命令更新资源库即可.
- iOS tableview的常用delegate和dataSource执行顺序
在这次项目中遇到了一个特别奇葩的问题:表视图创建的cell在7以上的系统能正常运行显示,在模拟器上就不能正常实现......为解决这个问题,纠结了好久...... 对在7系统上不显示的猜测: 用mas ...
- Node.js使用superagent模拟GET/POST请求样例
示例代码: var superagent = require('superagent'); superagent.get("http://localhost:8091/user/all?re ...
- rabbitmq-BasicReject
拒收,是接收端在收到消息的时候响应给RabbitMQ服务的一种命令,告诉服务器不应该由我处理,或者拒绝处理,扔掉.接收端在发送reject命令的时候可以选择是否要重新放回queue中.如果没有其他接收 ...
- centos7安装过程中的安装源设置
centos7的安装源设置:http://mirrors.aliyun.com/centos/7/os/x86_64/
- 【VS开发】QueryPerformanceFrequency与QueryPerformanceCounter的使用
LARGE_INTEGER tima,timb; QueryPerformanceCounter(&tima); 在 Windows Server 2003 和 WindowsXP 中使用 Q ...