simple sample
▲连接Oracle数据库
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider=msdaora;Data Source=dl580;User Id=emssxjk;Password=emssxjk;"
dl580是tnsnames.ora中配置的服务名。
▲创建记录集recordset
Set rst = CreateObject("ADODB.Recordset")
sqls = "select * from tb_city"
Set rst = cnn.Execute(sqls)
这儿的SQL语句除了查询语句select以外,也可以用insert、update、delete等命令,也可以用truncate table这样的命令。这些SQL语句也可以用command对象完成。command对象还可以进行存储过程的调用并传递参数。
▲记录集结果的引用
Excel VBA 通过ADO取到数据后,有如下引用方式(假定记录集名字为rst):
1、字段数量:rst.fields.count;
2、字段名称:rst.fields(0).name,0表示第一个字段,其它字段分别是1,2,...rst.fields.count-1;
3、字段值:rst(0)或者rst(0).Value或者rst.fields(0).value,0表示第一个字段,也可以用字段名代替,如:rst("city");
4、整个记录集: Range("a2").CopyFromRecordset rst命令将记录集保存到A2单元格开始的工作表中;
5、记录移动:取数后记录定位在第一条,rst.movenext可以移动到下一条,结尾标志:rst.eof = true,Excel VBA只支持向前移动(rst.movenext);
6、记录数:rst.RecordCount是反馈记录数的,但在VBA中却总是反馈-1,不过可以根据rst.eof判断有无查询结果,如果rst.eof= true就表示查询结果为空。
▲调用存储过程
1、连接数据库,如前;
2、定义存储过程
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = cnn
cmd.CommandText = "zfqf_bag2mail" '存储过程名称,有两个参数
cmd.CommandType = adCmdStoredProc
3、参数赋值
cmd.Parameters(1).Value = Cells(row1, pos_acc)
cmd.Parameters(2).Value = Cells(row1, pos_lab)
4、执行存储过程
cmd.Execute
这个存储过程的结果保存在表中,通过查询语句得到结果,没有通过变了返回。
1,不带参数的,直接在连接或Recordset 中用“EXEC 过程名”调用即可。
Private Sub cmdPrepareNewMinSalary_Click()
Dim conEmployees As ADODB.Connection
Dim strProcedure As String
Set conEmployees = Application.CurrentProject.Connection
strProcedure = "CREATE PROCEDURE SetNewMinSalary " & _
"AS " & _
"Update Employees " & _
"SET HourlySalary = 12.50;"
conEmployees.Execute strProcedure
conEmployees.Close
End Sub
调用程序如下:
Private Sub cmdNewMinSalary_Click()
Dim conEmployees As ADODB.Connection
Dim strProcedure As String
Set conEmployees = Application.CurrentProject.Connection
strProcedure = "EXECUTE SetNewMinSalary;"
conEmployees.Execute strProcedure
conEmployees.Close
End Sub
2,带一个参数的,也可以直接调用,如下例子
Private Sub cmdCreateProcedure_Click()
Dim conEmployees As ADODB.Connection
Dim strProcedure As String
Set conEmployees = Application.CurrentProject.Connection
strProcedure = "CREATE PROCEDURE SetNewMinSalary " & _
"(NewMinSalary Currency) " & _
"AS " & _
"Update Employees " & _
"SET HourlySalary = NewMinSalary " & _
"WHERE HourlySalary < NewMinSalary;"
conEmployees.Execute strProcedure
MsgBox "The new stored procedure has been created."
conEmployees.Close
End Sub
调用时直接输入一个参数。
Private Sub cmdExecuteProcedure_Click()
Dim conEmployees As ADODB.Connection
Dim strProcedure As String
Set conEmployees = Application.CurrentProject.Connection
strProcedure = "EXECUTE SetNewMinSalary 14.50;"
conEmployees.Execute strProcedure
MsgBox "The minimum hourly salary has been set to 14.50/hr"
conEmployees.Close
End Sub
3:最麻烦的是带有多参数的,如下面的例子带有两个参数。
直接从SQL server复制过程如下:
CREATE PROCEDURE [dbo].[Max_2ExcelDB]
(
@Territory varchar(10)='All',
@Country varchar(10)='CN'
)
AS
set nocount on
if @Territory='All'
BEGIN
select * from CustomerDB
set nocount off
END
else
begin
select a.* from CustomerDB a left join DistributorDB b
on a.Distributor=b.Distributor
where b.Territory in (@Territory,'Open') and a.Country=@Country
end
set nocount off
调用程序如下,这时候就要请出ADODB.Command对象了:
Sub CallmyProc()
Dim conn As ADODB.Connection
Dim MyProc As ADODB.Command
Dim sSql As String
Dim SrcArr
Set conn = New ADODB.Connection
Set MyProc = New ADODB.Command
conn.ConnectionString = connStr(1)
conn.Open
If conn.State = adStateOpen Then
With MyProc
.ActiveConnection = conn
.Prepared = True
.CommandText = "Max_2ExcelDB"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@Territory", adChar, adParamInput, 10, "South")
.Parameters.Append .CreateParameter("@Country", adChar, adParamInput, 10, "CN")
ThisWorkbook.Sheets("sheet4").Cells(1, 1).CopyFromRecordset .Execute
End With
Else
MsgBox " 无法打开数据库"
End If
conn.Close
Set conn = Nothing
Set MyProc = Nothing
End Sub
4,更麻烦的是带有多参数,还有返回参数的,也是用Adodb.command对象解决。下面代码来自网络http://www.officefans.net/cdb/viewthread.php?tid=91224:
Set 连接 = CreateObject("ADODB.Connection")
Set 过程 = CreateObject("ADODB.Command")
连接.Open "Driver={SQL Server};Server=192.168.1.2;Database=数据库名_A;uid=共用登录;pwd=123456"
起始日期="2007-12-1"
截止日期="2008-3-1"
With 过程
.ActiveConnection = 连接
.Prepared = True
.CommandText = "vba_分数统计"
.CommandType = 4
.Parameters.Append .CreateParameter("@起始日期", 200, 1, 20, 起始日期) ‘append 与后面的点. 需要加空格,即将createparameter返回值传给append方法。
.Parameters.Append .CreateParameter("@截止日期", 200, 1, 20, 截止日期)
.Parameters.Append .CreateParameter("@姓名", 200, 1, 50, Worksheets(2).Cells(2, 1).Value)
.Parameters.Append .CreateParameter("@返回分数", 2, 2)
.Execute
Worksheets(1).Cells(1,1).Value = .Parameters("@返回分数")
.Close
Set 连接 = Nothing
end with
create PROCEDURE pro1
@id int=10,
@count int output
AS
BEGIN
select @count=COUNT(*) from test1 where id>@id;
end
既能返回数据集又能输出参数。
With command
.ActiveConnection = con
.CommandType = adCmdStoredProc
.CommandText = "pro1"
.Parameters.Append .CreateParameter(Name:="@id", Value:=0, Type:=adInteger)
.Parameters.Append .CreateParameter(Name:="@count", Type:=adInteger, Direction:=adParamOutput)
Set rs = .Execute()
MsgBox .Parameters("@count").Value
End With
-----------------------------
分享到:
相关推荐
在“VBA Call WebService”的场景中,我们关注的是如何使用VBA来调用Web服务,尤其是通过SoapToolkit进行通信。 SoapToolkit是一个用于创建和消费SOAP(Simple Object Access Protocol)消息的工具,它使得VBA能够...
vba工程,画圆,源码 vba工程,画圆,源码 vba工程,画圆,源码 vba工程,画圆,源码 vba工程,画圆,源码
在Microsoft Office应用程序中,"CommandBars"对象是VBA(Visual Basic for Applications)和宏编程中的一个重要概念,它主要用于管理用户界面中的各种命令按钮、菜单和工具栏。本资料包显然是一个关于`CommandBars`...
二维码小工具 - VBA_二维码vba_二维码_二维码生成_VBa_VBA二维码是一个使用VBA(Visual Basic for Applications)编程实现的Excel宏工具,它允许用户在Excel环境中生成二维码。VBA是Microsoft Office套件中内置的一...
VBA(Visual Basic for Applications)是一种在Microsoft Office套件中广泛使用的编程语言,允许用户自定义功能、创建宏和自动化工作流程。WPS Office,作为Microsoft Office的替代品,也开始支持VBA,尤其是VBA 7.1...
AutoCAD VBA(Visual Basic for Applications)是一种强大的编程工具,专为AutoCAD用户设计,用于扩展和自动化CAD软件的功能。这个“AutoCAD-VBA命令大全.zip”文件包含了一个名为“AutoCAD-VBA命令大全.doc”的文档...
本文将深入探讨WPS Office对于VBA(Visual Basic for Applications)的支持,特别是关于VBA 7.1版本及其相关的插件,以帮助用户更好地理解和利用这一功能。 VBA是Microsoft Office中内置的一种编程语言,允许用户...
VBA(Visual Basic for Applications)是Microsoft Office套件中内置的一种编程语言,它允许用户自定义各种应用程序的功能,包括Excel、Word、PowerPoint等。VBA代码助手专业版是一款专门针对VBA编程的辅助工具,...
在Excel中结合VBA(Visual Basic for Applications)实现进销存管理,可以提供一种便捷且自定义化的解决方案,尤其适合中小企业或个人使用。下面将详细介绍这种系统的基本构成和关键功能,以及VBA在其中的应用。 ...
VBA代码库收藏管理, VBA中文代码库输入提示, VBA变量名首字母输入提示 VBA函数过程输入提示, VBA代码自动对齐排版, VBA代码混淆, VBA工程密码破解, Excel VBA模块隐藏保护, VBA颜色修改器, VBA代码行号显示 ...
标题:EXCEL VBA各种常用命令 描述:本文汇总了VBA(Visual Basic for Applications)在Excel中的常用命令、对象、属性及用法,旨在帮助用户掌握自动化办公文档的高级技巧,提高工作效率。 ### 一、工作表保护与...
vba函数说明,几乎所有vba函数的说明及实例
VBA(Visual Basic for Applications)是Microsoft Office套件中内置的一种编程语言,它允许用户自定义功能、自动化任务,极大地提升了工作效率。本教程主要聚焦于Excel VBA和Word VBA,这两个工具在日常办公中有着...
VBA手册是微软官方提供的关于Visual Basic for Applications(VBA)编程语言的指南,它主要面向使用MS Office 2010或MS Excel VBA进行自动化任务和创建宏的用户。VBA是为Office套件量身打造的编程语言,用于控制文档...
VBA课件适用于VBA入门VBA入门VBA入门VBA入门VBA入门
VBA(Visual Basic for Applications)是Microsoft Office套件中内置的一种编程语言,它允许用户自定义功能、自动化任务,甚至可以操作外部数据源,如数据库。在这个“VBA操作数据库实例”中,我们将深入探讨如何...
VBA代码通常包含模块(Module)、过程(Procedure)和变量声明。在VBA环境中,我们可以创建Sub过程来执行文件搜索和目录生成的任务。 以下是一个简单的VBA代码示例,用于遍历指定文件夹及其子文件夹,获取所有文件...
VBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA WPSVBA ...
第001集:宏与VBA 第002集:VBA中的语句、对象、方法与属性 第003集:循环语句 第004集:判断语句 第005集:VBA变量 第006集:函数与公式 第007集: VBE编辑器 第008集:VBA分支与End语句 第009集: excel文件操作 第010集:...