vba command call procedure

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



-----------------------------
Allegro SKILL脚本实战:一键导出PCB封装信息与引脚统计 在PCB设计与硬件工程领域,自动化脚本是提升效率、减少人为错误的关键技术。其核心原理是通过编程语言(如Cadence Allegro的SKILL)调用设计软件的API接口,实现对设计数据的结构化提取与处理。这项技术的价值在于将工程师从繁琐的重复性手动操作中解放出来,确保数据的一致性与准确性,尤其适用于封装库管理、BOM核对、生产文件准备等场景。本文聚焦于一个典型的工程实践案例:利用SKILL脚本在Allegro环境中实现单颗零件封装信息的快速导出,并附带引脚数量统计功能。该方案直接回应了工程师在数据提取和封 阅读详情

相关推荐

Delphi下用Native Excel源码版高效生成Excel报表的完整指南

在企业管理系统中,Excel导出始终是高频且刚需的功能,无论是报表生成、数据对账还是模板填充,都要求稳定、高效且格式可控。Delphi开发者常面临三条技术路线:COM/OLE自动化虽然功能完整,但依赖Office环境且性能低下;ADO直导速度尚可却几乎无法控制格式;而Native Excel组件则绕开外部进程,直接在Delphi内部生成符合BIFF8格式的xls文件,部署简单、性能卓越。当组件以完整源码形式呈现时,开发者不仅能规避COM的释放隐患,还能深入SST字符串表、公式链等底层机制,针对大数据量导出做

weixin_30512965的博客 214

ADODB.Command 对象

Coonamd 对象定义了将对数据源执行的命令,可以用于查询数据库表并返回一个记录集,也可以用于对数据库表进行添加、更改和删除操作。  一、使用Command 对象的步骤:  当在 ASP 页面中使用 Command 对象处理数据时,应首先设置命令类型、命令文本以及相关的活动数据库连接等,并通过 Parameter 对象传递命令参数,然后通过调用 Execute 方法来执行 SQL 语句或

OpenExcelServer的专栏 4903

HyperLynx实战:手把手教你搞定DDR4信号完整性仿真(附ODT与终端电阻配置避坑)

本文详细介绍了使用HyperLynx进行DDR4信号完整性仿真的实战技巧,重点解析了ODT配置与终端电阻优化的黄金法则。通过模型准备、拓扑构建、ODT扫描等关键步骤,帮助硬件工程师规避常见设计陷阱,提升高速数字电路设计的效率与可靠性。

weixin_30861797的博客 640

Excel VBA 链接 Oracle数据库

标题前言准备第一步 远程数据库的准备第二步 本地免安装客户端下载1、下载基本包1.1 包下载地址1.2 网盘下载地址2、配置oracle 网络文件2.1tnsnames.ora 文件内容第三步、安装odbc 驱动、配置DSN数据源1 安装odbc 驱动2 配置DSN数据源第四步 VBA链接数据库测试4.1 设置相应的 Windows 环境变量4.2 新建 vba 文件进行测试第五步 坑货问题 前言         由于自己的工

dadaowuque的博客 9459

LLM大模型基础知识【一】

大语言模型(LLM):是指在自然语言处理(Natural Language Processing,NLP)领域中的一类大模型,通常用于处理文本数据和理解自然语言。这类大模型的主要特点是它们在大规模语料库上进行了训练,以学习自然语言的各种语法、语义和语境规则。例如:GPT系列(OpenAI)、Bard(Google)、文心一言(百度)。视觉大模型:是指在计算机视觉(Computer Vision,CV)领域中使用的大模型,通常用于图像处理和分析。

lin_xi_xi的博客 2878

手把手教你用Cadence Virtuoso完成LNA全套仿真:基于SpectreRF手册的实战补充

本文详细指导如何使用Cadence Virtuoso和SpectreRF完成LNA的全套仿真,涵盖噪声仿真、增益压缩、THD分析及双音IP3测量等关键步骤。针对官方手册中的常见问题,提供了12个实战解决方案,包括hbnoise函数选择、双音信号源配置等,帮助工程师高效完成射频IC设计。

weixin_29102619的博客 523

vba中adodb.command对象的execute方法在win10系统下出错

各位大神,能否帮忙解答一个vba的问题 用下面代码在win7系统下可以运行,在win10系统中就出问题, 运行到倒数第三行 Set rs = adocmd.Execute 就报错, 提示:方法“execute”作用于对象“_command”时失败 不知道是不是vba中的execute方法在win10中不兼容的原因 求大神解答,感激不尽! Sub test() Dim rs As New ADOD...

xag_young的博客 3446

使用Java实现CRC16 MODBUS 格式校验

CRC16校验,测试如下 String str = "a5 98 03 00 00 5f c6 0f 7c 40 78 06 09 46 dc 6e db 00 16 3e 12 5c 98 00 19 98 0e 10 03 06 09 46 dc 6e db 03 0b bf 5f c6 0f 7c 43 bd b9 61 ee 96 76 99"; 校验规则: /** * CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结

weixin_45063710的博客 1314

VB下使用adodb.command 执行存储过程注意

一、如果想得到存储过程RETURN值,则返回值的参数添加一定要放在所有参数之前。  COMMAND.PARAMETERS.ADD returnValuePara二、如果想得到存储过程的返回参数。则不能返回结果集,反之亦然三、当存储过程返回不只一个结果集时,可用rECORDSET.NEXTRECORDSET方法访问下一个结果集

charlse168的专栏 3301

uni-app一键登录实战:从云函数配置到前端调用的完整指南

本文详细介绍了uni-app中一键登录功能的实现方法,从DCloud控制台配置到云函数开发,再到前端调用全流程。通过一键登录,用户无需输入账号密码即可快速使用本机手机号登录,显著提升用户体验和登录转化率。文章还提供了常见问题排查和安全合规要点,帮助开发者高效完成集成。

weixin_29291573的博客 445

sldd数据字典导出为excel

sldd导出为excel

zpfjf的博客 2237

oracle宏,VBA宏调用Oracle PL/SQL Procedure

1.定义一个测试Procedure,这个Procedure用于给临时表插入一条记录create sequence pt_debug_sequenceINCREMENT BY 1 -- 每次加几个START WITH 1 -- 从1开始计数NOMAXVALUE -- 不设置最大值NOCYCLE -- 一直累加,不循环CACHE 10;--1. Create temp table.create t...

weixin_30456719的博客 272

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

王老师青少年编程 3396

VBA宏调用Oracle PL/SQL Procedure

1.定义一个测试Procedure,这个Procedure用于给临时表插入一条记录create sequence pt_debug_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1...

cnvdkx2837的博客 104

AI工具 | 每个打工人必备的15款人工智能超级工具

不过,还是有一些靠谱的人工智能平台,它们可不只是营销噱头。有些AI公司正试图改变游戏规则。人工智能工具让人们能够更聪明地工作,而不是更辛苦地劳作。如果你想知道未来有什么,那就来看看这10款人工智能工具吧,它们将彻底改变我们的工作方式。

Vampire_2017的博客 5万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

在access中编程输出sql server存储过程的返回值

Access SQL server 存储过程返回值

zyj_lancao的专栏 929

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

如何使用ado访问oracle数据库存储过程,如何使用ADO访问Oracle数据库存储过程

---- 一、关于ADO---- 在基于Client/Server结构的数据库环境中,通过OLE DB接口可以存取数据,但它定义的是低层COM接口,不仅不易使用,而且不能被VB,VBA,VBScript等高级编程工具访问。而使用ADO则可以很容易地使VB等编程语言直接访问数据(通过OLE DB接口)。ADO是基于面向对象方法的,其对象模型如下图所示(略)---- 由上图可见,ADO对象模型总共才包...

weixin_39810901的博客 323

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

oracle数据库存大文本,Oracle大文本在ASP中存取问题的解决

一、关于ADO在基于Client/Server结构的数据库环境中,通过OLE DB接口可以存取数据,但它定义的是低层COM接口,不仅不易使用,而且不能被VB,VBA,VBScript等高级编程工具访问。而使用ADO则可以很容易地使VB等编程语言直接访问数据(通过OLE DB接口)。ADO是基于面向对象方法的,ADO对象模型总共才包括六个对象,相对于数据访问对象(DAO)来说简单得多。因此实际中常常...

weixin_34969621的博客 228

如何使用ado访问oracle数据库存储过程,[转贴]如何使用ADO访问Oracle数据库存储过程...

北京科技大学管理学院陈林生---- 一、关于ADO---- 在基于Client/Server结构的数据库环境中,通过OLE DB接口可以存取数据,但它定义的是低层COM接口,不仅不易使用,而且不能被VB,VBA,VBScript等高级编程工具访问。而使用ADO则可以很容易地使VB等编程语言直接访问数据(通过OLE DB接口)。ADO是基于面向对象方法的,其对象模型如下图所示(略)---- 由上图可...

weixin_42129113的博客 330

ado mysql 存储过程_如何使用ADO访问Oracle数据库存储过程

来源:网络/责编:编程入门 作者:不详 window.google_render_ad();一、关于ADO在基于Client/Server结构的数据库环境中,通过OLE DB接口可以存取数据,但它定义的是低层COM接口,不仅不易使用,而且不能被VB,VBA,VBScript等高级编程工具访问。而使用ADO则可以很容易地使VB等编程语言直接访问数据(通过OLE DB接口)。ADO是基于...

weixin_28898707的博客 158

ASP调用存储过程的技巧

1、最简单的如下Dim objConnSet objConn = Server.CreateObject(ADOBD.Connection)objConn.Open Application(Connection_String)Call the stored procedure to increment a counter on the pageobjConn.Execute exec

骆枫专栏 1325

ADO

在ASP中,一般通过command对象调用存储过程,根据不同情况,本文也介绍其它调用方法。为了方便说明,根据存储过程的输入输出,作以下简单分类:1. 只返回单一记录集的存储过程假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明): /*SP1*/CREATE PROCEDURE dbo.getUserListasset nocount onbeg...

weixin_34126557的博客 85

EDA领域Skill语言入门:从核心概念到实战应用全解析

在电子设计自动化(EDA)领域,脚本语言是实现设计流程自动化、提升工作效率的关键技术。其核心原理在于通过编程接口直接操作设计数据库,与图形化工具深度集成,从而将重复性手动操作转化为可重复执行的自动化任务。这种技术为芯片设计和PCB布局布线工程师带来了巨大的价值,能够显著减少人为错误、缩短设计周期,并支持复杂设计规则检查与定制化流程开发。典型的应用场景包括批量修改器件属性、自动化版图检查、定制用户界面以及扩展工具原生功能等。本文聚焦于Cadence环境中的Skill语言,这是一种深受LISP影响的专用脚本语言

weixin_33857679的博客 399

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

工作中使用到的单词(软件开发)_第五版

本文摘要: 本文为软件开发相关的术语与技术要点整理,主要包含2020-2025年间四版内容更新(No.01-41)。重点包括: 证书文件格式(PEM/P12)差异 外部API通信注意事项(Accept头设置、HTTPS连接问题) Postman工具使用技巧(Cookie管理、请求头设置) WAS配置相关经验(JVM设置、SSL连接问题) 数据库操作命令(DB2表结构修改) IBM安全管理组件(TAM/iv-user机制) 网络通信细节(chunked传输编码特性) 常用开发工具(curl、Postman)的

sun0322 2520

VB数据库操作---ADODB.Command 终结所有SQL注入

演示了command的使用。另外还有设置参数,防止注入,不太明白。 http://blog.youkuaiyun.com/kj021320/article/details/1689960 通常为了省事 程序员都喜欢直接采用Connection的execute方法,SQL是拼凑出来的!当然很容易出现问题了~~而很多人都知道 Command可以用来执行存储过程 其实Command 直接执...

anlei2455的博客 669
上一篇: vba error
下一篇: VS2015(Install Shield 2015 limited Edition )软件打包过程
tangleisoft
博客等级 码龄16年 8粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值