Вызов хранимой процедуры SQL с входным параметром - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно написать небольшой VBScript для вызова процедуры SQL с входной переменной.У меня нет большого опыта работы с VBscript, и я получаю сообщение об ошибке, для которого не могу найти решение.Я получаю сообщение об ошибке:

OnNewRecord (строка 14): [Драйвер ODBC Firebird] [Firebird] Несовпадение входного параметра динамической ошибки SQL для процедуры TEST

VBScriptЯ написал:

Const Connection = "DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Users\wouter\FOR-TESTING.fdb;"
Const adParamInput = 1
Const adInteger = 3
Set myConn = CreateObject("ADODB.Connection")
myConn.Open Connection

Set spCommand = CreateObject("ADODB.Command")
spCommand.Commandtext = "TEST" 
spCommand.CommandType = 4

Set parameter = spCommand.CreateParameter(, adInteger, adParamInput, 4, 5)

Set spCommand.ActiveConnection = myConn
spCommand.Execute 
myConn.Close

Этот VBscript вызывает следующую процедуру:

CREATE OR ALTER PROCEDURE TEST (ID INTEGER)
AS BEGIN
UPDATE MATERIAL_LABEL SET PRINTED = 'T', HANDLED_DATE = CURRENT_TIMESTAMP 
WHERE ID = :ID;
END

ID INTEGER должен быть вводом переменной, но для тестирования кода я использую числовое значение5. Я думаю, что это как-то связано с процедурой, требующей ввода другого типа, но я не могу найти какой.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Как сказал Ансгар Вичерс, вы должны передать параметр в хранимую процедуру, добавив его:

spCommand.Parameters.Append parameter
0 голосов
/ 05 июня 2018

Я решил проблему, используя другой метод для вставки моего числового значения:

Const Connection = "DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Users\wouter\FOR-TESTING.fdb;"
Set myConn = CreateObject("ADODB.Connection")

myConn.Open Connection

SQL = "execute procedure TEST 5"
Set dbconn = CreateObject("ADODB.Connection")
dbconn.Open connection
dbconn.Execute(SQL)
myConn.Close

- ОБНОВЛЕНИЕ -

Поскольку Ансгар Вихерс и Михай Адриан объяснили мне причинуза мою ошибку и Geert bellekens предупредил меня о риске внедрения SQL-кода. Я попытался добавить «строку добавления» в мой VBScript, и это также отлично работает!

Настоящим мой готовый VBScript:

Const Connection = "DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Users\wouter\FOR-TESTING.fdb;"
Const adParamInput = 1
Const adInteger = 3
Set myConn = CreateObject("ADODB.Connection")
myConn.Open Connection

Set spCommand = CreateObject("ADODB.Command")
spCommand.Commandtext = "TEST" 
spCommand.CommandType = 4

Set parameter = spCommand.CreateParameter(, adInteger, adParamInput, 4, 5)
spCommand.Parameters.Append parameter

Set spCommand.ActiveConnection = myConn
spCommand.Execute 
myConn.Close

Спасибо!

...