VBA中使用ADO,参数化查询出现 Automation error

最近初次尝试在VBA中使用ADO对象进行参数化查询,一直出现Automation error,网上总是找不到对应的解决办法,经过反复尝试,终于搞清楚了。

假设cmd是ADODB.command 对象,其设置过程省略,要点集中在CommandText属性和Parameters集合

‘代码开始

Dim  cmd as NewADODB.Command

Dim rst as ADODB.recordset

‘设置过程省略

‘添加两个参数

cmd.Parameters.Append cmd.CreateParameter(, adVarChar, ,Len(objT.BL), objT.BL)

cmd.Parameters.Append cmd.CreateParameter(, adChar, ,Len(objT.LLP), objT.LLP)

cmd.CommandText = "select BLNO from dbo.TSP whereBLNO=?" ‘SQL语句只用了一个参数

‘此时如果执行,必定跳出Automation error

Set rst = cmd.Execute()

‘代码结束

我想原因在于——cmd添加了2个参数,但是在SQL语句只用了一个参数,实际使用的参数个数与所添加的参数个数不一致。把参数去掉一个,顺利执行!


只知道ADODB.COMMAND对象可以添加很多很多参数,但是不知道对于参数的个数还有这种限制,要是哪位能找到相关的文档还麻烦告诉我一下啊——最好是微软官方的——在这里先谢谢了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA使用ADO (ActiveX Data Objects) 连接到SQL Server数据库通常涉及以下几个步骤: 1. 引入必要的模块:首先需要导入Microsoft ActiveX Data Objects 6.0 Library (DAO) 和 Microsoft Jet Database Engine (JET DB)。这可以通过`Tools > References`菜单在VBA编辑器完成。 ```vba Option Explicit '声明所有变量 Dim conn As ADODB.Connection '创建ADODB.Connection对象 Dim rs As ADODB.Recordset '创建ADODB.Recordset对象 ``` 2. 建立连接字符串:根据你的数据库信息(服务器地址、端口、数据库名、用户名和密码),构建连接字符串。例如: ```vba Dim connectionString As String connectionString = "Provider=SQLOLEDB;Data Source=<服务器地址>;Initial Catalog=<数据库名>;User ID=<用户名>;Password=<密码>" ``` 记得将 `<服务器地址>`、`<数据库名>`、`<用户名>` 和 `<密码>` 替换为你实际的数据库属性。 3. 打开连接: ```vba Set conn = New ADODB.Connection conn.Open connectionString ``` 如果连接失败,会抛出异常,你可以捕获并处理它。 4. 执行查询: 完成连接后,可以使用Recordset对象执行SQL命令,比如 `rs.Open SQLQuery, conn, adOpenStatic, adLockOptimistic`, 其 `SQLQuery` 是你要执行的SQL查询。 5. 关闭连接和释放资源: 当你不再需要连接时,记得关闭Recordset和Connection对象: ```vba rs.Close Set rs = Nothing conn.Close Set conn = Nothing ``` 记住,为了保持良好的编程实践,始终应该检查这些对象是否已经设置了(`IsNull()` 或 `IsObject()` 函数)并在完成后释放它们,以防内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值