-
При вызове execute ругается что неверно определен объект параметр
/*в процедуре два параметра, один инпут и один аутпут */
with TADOCommand.Create(Self) do try Connection := ADOConnection1; CommandText := 'GET_STATE'; CommandType := cmdStoredProc; with Parameters.AddParameter do begin Name := 'p_source_id'; DataType := ftInteger; Direction := pdInput; Value := 13879; end;
with Parameters.AddParameter do begin Name := 'p_out_state'; DataType := ftInteger; Direction := pdOutput; end; Execute; ....
-
может, собачку надо перед именем?
-
Не помогает. Пробовал и с собачкой и без. Текст ошибки одинаков
-
а в хранимке out стоит у параметра?
-
параметры не нужно создавать, их нужно считывать (рефреш вроде пойдет, не помню давно с процедурами как с cmdStoredProc не работал, явным запросом проще)
-
CommandText := 'GET_STATE';
А где здесь в тексте команды место, где подразумевается использование параметра?
-
> где подразумевается использование параметра? при cmdStoredProc это имя процедуры, параметры запрашиваются с сервера, те с которыми процедура написана.
-
в общем после многих научных тыков удалось вызвать эту процу.
Параметры создаю явно как и было описано выше.
(После refresh длина коллеции параметров возвращает верное значение, но экзек все равно заканчивается неудачей, "'экспектс такой-то параметер вич вазнот сапплаед" ) То есть подозреваю, что после рефреша надо все равно явно выставлять всем параметрам типы, дирекшен и прочее.
Во вчерашнем коде причина ошибки была в том, что есть еще один аутпут параметр строкового типа. Он создавался точно так же, но ему не был указан Size. После указания длины все поехало как надо.
И еще почему-то когда имя процедуры устанавливаешь в дизайне, с помощью редактора командтекст, то все хранимки видны как <оригинальное_имя>;1
То есть в дизайне у меня присвоилось 'GET_STATE;1'
|