Доброго времени суток
Существует ХП, принимающая и возвращающая парметры. Для ее вызова использую TUniSQL.
Свойство SQL формирую вручную, т.к. так удобнее контролировать текст запроса. Процедура выполняется, но если я хочу получить выходной параметр через ParamByName("OutParam")->AsInteger, то получаю сообщение Parametr 'OutParam' not found.
Под FIB эта конструкция работала. Подскажите, пожалуйста, что нужно изменить.
Возвращаемый параметр процедуры Firebird
Re: Возвращаемый параметр процедуры Firebird
Для доступа к параметрам хранимой процедуры с помощью TUniSQL, вы можете вызвать метод TUniSQL.CreateProcCall перед вызовом TUniSQL.Execute. Например;
Более подробную информации об этом методе Вы можете получить в UniDAC помощи: https://www.devart.com/unidac/docs/Deva ... tring).htm
Также, вы можете в UniSQL.SpecificOptions установить в True опцию DescribeParams и вызвать метод TUniSQL.Prepare. Например;
Код: Выделить всё
UniSQL.CreateProcCall('Stored_proc_name');
UniSQL.ParamByName('In_param').AsInteger := 3;
UniSQL.Execute;
ShowMessage(UniSQL.ParamByName('Out_param').AsString);
Также, вы можете в UniSQL.SpecificOptions установить в True опцию DescribeParams и вызвать метод TUniSQL.Prepare. Например;
Код: Выделить всё
UniSQL.SpecificOptions.Values['InterBase.DescribeParams'] := 'True';
UniSQL.Prepare;
UniSQL.ParamByName('In_param').AsInteger := 3;
UniSQL.Execute;
ShowMessage(UniSQL.ParamByName('Out_param').AsString);
Re: Возвращаемый параметр процедуры Firebird
Суть проблемы в том, что нужно значения параметров задавать в свойстве SQL, например
В процедурах без выходных параметров такая конструкция работает, а вот если нужно получить значение выходного параметра там, где они присутствуют, возникает исключение.
С методом CreateProcCall все работает без проблем, но не всегда удобно задавать входные параметры через ParamByName.
Подскажите, пожалуйста, возможно ли все таки прописывть запрос со значениями параметров в SQL, чтобы после этого читался выходной параметр?
Код: Выделить всё
UniSQL->SQL->Add("Execute procedure procName ("+IntToStr(In_param)+")");
UniSQL->Execute();
С методом CreateProcCall все работает без проблем, но не всегда удобно задавать входные параметры через ParamByName.
Подскажите, пожалуйста, возможно ли все таки прописывть запрос со значениями параметров в SQL, чтобы после этого читался выходной параметр?
Re: Возвращаемый параметр процедуры Firebird
Для получения значения OUT параметра вам следует изменить ваш код на следующий:
Код: Выделить всё
UniSQL->SQL->Add("Execute procedure procName ("+IntToStr(In_param)+")");
UniSQL->SpecificOptions->Values["InterBase.DescribeParams"] = "True";
UniSQL->Prepare();
UniSQL->Execute();
ShowMessage(UniSQL->ParamByName("PO")->AsString);
Re: Возвращаемый параметр процедуры Firebird
Спасибо за поддержку, понял!
Re: Возвращаемый параметр процедуры Firebird
Рады слышать, что проблема решена. Обращайтесь к нам, если у Вас возникнут вопросы по UniDAC.