【发布时间】:2019-05-05 06:53:43
【问题描述】:
尝试使用 ADODB 执行 Oracle 存储过程。在将布尔值添加到过程之前没有问题。我认为问题在于 CreateParameter adBoolean DataTypeEnum。
错误:调用 WEIGH_PACKAGE_PR 中的参数数量或类型错误
甲骨文
PROCEDURE WEIGH_PACKAGE_PR
(in_action_code IN NUMBER,
in_pass_num IN NUMBER,
in_cont_no IN VARCHAR2,
in_scale_id IN VARCHAR2,
in_current_user IN NUMBER,
in_bypassnumber IN NUMBER,
in_override_tarewt IN BOOLEAN)
VBA
With db
If .state = adStateClosed Then
.ConnectionString = conStr
.CursorLocation = adUseClient
.Open
End If
End With
With cmd
.ActiveConnection = db
.NamedParameters = True
.CommandType = adCmdStoredProc
.CommandText = "COMMON_SCALES_PK.WEIGH_PACKAGE_PR"
.Parameters.Append .CreateParameter("in_action_code", adBigInt, adParamInput, , 1)
.Parameters.Append .CreateParameter("in_pass_num", adBigInt, adParamInput, , 1)
.Parameters.Append .CreateParameter("in_cont_no", adVarChar, adParamInput, 10, "I658638002")
.Parameters.Append .CreateParameter("in_scale_id", adVarChar, adParamInput, 6, "T05R02")
.Parameters.Append .CreateParameter("in_current_user", adBigInt, adParamInput, , 3737)
.Parameters.Append .CreateParameter("in_bypassnumber", adBigInt, adParamInput, , Null)
.Parameters.Append .CreateParameter("in_override_tarewt", adBoolean, adParamInput, 1, False)
Set rst = .Execute()
End With
【问题讨论】:
-
只是在黑暗中拍摄,但将
False替换为0? -
@ScottHoltzman 试过了。不行。
-
CBool("False")?关键似乎是让 VBA 布尔值转换为 psql 布尔值。另外你确定你调用的是正确的数据库吗?例如,如果您在数据库的 dev 版本中添加了布尔值,但在 excel 中调用 prod 版本并且尚未更新,则可能会产生您收到的错误消息。 -
@ScottHoltzman 刚刚尝试了 CBool("False")。不去。除了将布尔值添加到 proc 之外,没有任何变化。一次添加一个参数,因为一次执行 32 个参数时遇到问题。直到 in_override_tarewt。
-
@ScottHoltzman 开发数据库。目前还没有生产数据库。
标签: excel vba oracle stored-procedures adodb