gpt4 book ai didi

ms-access - ms access 中的 ADO Command 对象

转载 作者:行者123 更新时间:2023-12-03 06:57:02 24 4
gpt4 key购买 nike

我不明白为什么以下代码失败。不幸的是,为了能够重现该问题,您必须创建一个有效的 mysql 连接对象,或者至少另一个 ODBC 兼容数据库。

以下代码基本上调用存储过程,例如 CALL my_procedure(12345);

代码:

' Create ADODB Connection object
Dim oConn As Object
Set oConn = CreateObject("ADODB.Connection")
Const MYSQL_DRIVER = "{MySQL ODBC 5.1 Driver}"
Const MYSQL_SERVER = "10.32.27.6"
Const MYSQL_DATABASE = "sales"
Const MYSQL_USER = "root"
Const MYSQL_PASSWORD = "xxxxxx"
oConn.ConnectionString = "DRIVER=" & MYSQL_DRIVER & ";Server=" & MYSQL_SERVER & ";Database=" & MYSQL_DATABASE & ";Uid=" & MYSQL_USER & ";Pwd=" & MYSQL_PASSWORD & ";"
oConn.Open


' parameter value
Dim lngAssemblyId As Long
lngAssemblyId = 12345


' Create ADODB.Command
Const adCmdText = 1
Const adParamInput = 1
Const adInteger = 3

Dim cmd As Object
Set cmd = CreateObject("ADODB.Command")

With cmd
Set .ActiveConnection = oConn
.CommandType = adCmdText
.CommandText = "CALL my_procedure(?)"
.Prepared = True
.Parameters.Append .CreateParameter(, adInteger, adParamInput, , lngAssemblyId)

End With


' execute command
Call cmd.Execute
Set cmd = Nothing

上面的代码将生成错误“参数类型不受支持”。在Call cmd.Execute

我找到了一些修复方法,但我不明白它们为什么起作用!

修复 1
a) 添加对“Microsoft ActiveX Data Objects 2.8 Library”的引用
b) 然后更改这部分代码:

Dim cmd As Object
Set cmd = CreateObject("ADODB.Command")

使用此代码:

Dim cmd as New ADODB.Command

修复 2
将 adInteger 的值从 3 更改为 20。值 20 表示 ADODB.DataTypeEnum 中的 adBigInteger 而不是 adInteger。 adBigInteger 是 8 字节数据类型,而 vba 中的“long”数据类型和 mysql 中的“INT”数据类型都是 4 字节数据类型,因此这是没有意义的。

修复3
将 lngAssemblyId 的变量类型从 Long 更改为 Integer。这很奇怪,因为 1) 我不需要在修复 1 中将变量限制为整数。
编辑:将数据类型更改为“Variant”也可以,没有限制为整数的缺点。

最佳答案

我已经找到了解决这个问题的方法。仍然不确定为什么这有效,而原始代码却不起作用!基本上我使用了一种略有不同的方式来绑定(bind)参数:

而不是这个:

.Parameters.Append .CreateParameter(, adInteger, adParamInput, , lngAssemblyId)

改用这个:

.Parameters(0).Direction = adParamInput
.Parameters(0).Type = adInteger
.Parameters(0).Value = lngAssemblyId

关于ms-access - ms access 中的 ADO Command 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6582976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com