【发布时间】:2022-02-19 22:36:38
【问题描述】:
[编辑 20220219]
使用下面的 VBSCRIPT CODE 解决
SQL = " CALL NewCheckData(@pOld); "
cn.execute(SQL)
SQL = " SELECT @pOld; "
Set RS = cn.execute(SQL)
pOld = cInt(RS("@pOld"))
[编辑 20220219]
[编辑]
我在 MySQL 数据库上有一个存储过程。
它只取参数的 COUNT ROWS 并返回该参数的值。
我想调用这个存储过程来为我的 VBscript 代码中的变量赋值。
这是 MySql 例程(存储过程)尝试和工作。
CREATE DEFINER=`user`@`%` PROCEDURE `NewCheckData`(OUT pOld INT (11))
BEGIN
SELECT
COUNT(*) tOld INTO pOld
FROM
`DoTable`
WHERE
DATE( myDATE ) = CURRENT_DATE;
END
VBSCRIPT 代码如下
On Error Resume Next
Const adCmdStoredProc = 4
Const adInteger = 3
Const adVarWChar = 202
Const adParamInput = &H0001
Const adParamOutput = &H0002
Const adParamReturnValue = &H0004
Set cn = CreateObject("ADODB.Connection")
cn.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=XXX;PORT=3306;DATABASE=XXX;USER=XXX;PASSWORD=XXX;OPTION=3;"
cn.CommandTimeout = 10000
Set cmd = CreateObject("ADODB.Command")
With cmd
Set .ActiveConnection = cn
.CommandText = "NewCheckData"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue )
.Parameters.Append .CreateParameter("@pOld", adInteger, adParamOutput, 11)
.Execute
parmval = .Parameters(0).Value
End With
cn.Close()
Set cn = Nothing
If Err.Number <> 0 Then
WScript.Echo "Error in : " & Err.Description
Err.Clear
End If
On Error GoTo 0
Error or messagebox
错误或消息框
任何建议,请。
[老问题]
我正在使用 VBSCRIPT 并使用存储过程 MySQL。
我必须得到存储过程输出参数的值。
这是 MySql 例程(存储过程)尝试和工作
CREATE DEFINER=`user`@`%` PROCEDURE `CheckData`(OUT pOld INT (11))
BEGIN
SELECT
COUNT(*) tOld INTO pOld
FROM
`DoTable`
WHERE
DATE( myDATE ) = CURRENT_DATE;
END
VBSCRIPT 代码如下
Set cn = CreateObject("ADODB.Connection")
cn.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=XXX;PORT=3306;DATABASE=XXX;USER=XXX;PASSWORD=XXX;OPTION=3;"
cn.CommandTimeout = 1000
Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = cn
objCommandSec.CommandType = 4
objCommandSec.CommandText = "CheckData"
objCommandSec.Parameters.Refresh
objCommandSec.Parameters.append objCommandSec.createParameter("@pOld", adInteger, adParamReturnValue) <<< error line
objCommandSec.execute , , adExecuteNoRecords
pOld = objCommandSec.Parameters("@pOld").value
MsgBox(pOld)
cn.Close()
Set cn = Nothing
错误或消息框第 15 行
Error 'Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another'
任何建议,请。
【问题讨论】:
-
你设置了错误的
ParameterType,它应该是adParamOutput而不是adParamReturnValue。见ParameterDirectionEnum -
@user692942 谢谢我已将
VBSCRIPT code从adParamReturnValue编辑为adParamOutput。同样的错误 -
@Akina True。我已经在 MySql 中编辑了 SP。
-
@EdwardSheriffCurtis 认为您还需要在
adParamOutput参数上指定Size。另外,您是否定义了“ADO 常量”、adInteger、adParamOutput等?例如,您应该有Const adInteger = 3,因为 VBScript 不会自动知道 ADO 命名常量。 -
@Akina True。我已经在 MySql 中编辑了 SP。谢谢
标签: mysql stored-procedures vbscript