Возвращаемый параметр процедуры Firebird

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Закрыто
3Hub
Сообщения: 17
Зарегистрирован: Вт 15 дек 2015 08:59

Возвращаемый параметр процедуры Firebird

Сообщение 3Hub » Сб 05 мар 2016 22:14

Доброго времени суток
Существует ХП, принимающая и возвращающая парметры. Для ее вызова использую TUniSQL.
Свойство SQL формирую вручную, т.к. так удобнее контролировать текст запроса. Процедура выполняется, но если я хочу получить выходной параметр через ParamByName("OutParam")->AsInteger, то получаю сообщение Parametr 'OutParam' not found.
Под FIB эта конструкция работала. Подскажите, пожалуйста, что нужно изменить.

ViktorV
Devart Team
Сообщения: 212
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Возвращаемый параметр процедуры Firebird

Сообщение ViktorV » Чт 10 мар 2016 08:10

Для доступа к параметрам хранимой процедуры с помощью TUniSQL, вы можете вызвать метод TUniSQL.CreateProcCall перед вызовом TUniSQL.Execute. Например;

Код: Выделить всё

  UniSQL.CreateProcCall('Stored_proc_name');
  UniSQL.ParamByName('In_param').AsInteger := 3;
  UniSQL.Execute;
  ShowMessage(UniSQL.ParamByName('Out_param').AsString);
Более подробную информации об этом методе Вы можете получить в UniDAC помощи: https://www.devart.com/unidac/docs/Deva ... tring).htm
Также, вы можете в 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);

3Hub
Сообщения: 17
Зарегистрирован: Вт 15 дек 2015 08:59

Re: Возвращаемый параметр процедуры Firebird

Сообщение 3Hub » Ср 16 мар 2016 21:46

Суть проблемы в том, что нужно значения параметров задавать в свойстве SQL, например

Код: Выделить всё

UniSQL->SQL->Add("Execute procedure procName ("+IntToStr(In_param)+")");
UniSQL->Execute();
 
В процедурах без выходных параметров такая конструкция работает, а вот если нужно получить значение выходного параметра там, где они присутствуют, возникает исключение.
С методом CreateProcCall все работает без проблем, но не всегда удобно задавать входные параметры через ParamByName.
Подскажите, пожалуйста, возможно ли все таки прописывть запрос со значениями параметров в SQL, чтобы после этого читался выходной параметр?

ViktorV
Devart Team
Сообщения: 212
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Возвращаемый параметр процедуры Firebird

Сообщение ViktorV » Чт 17 мар 2016 12:38

Для получения значения 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);

3Hub
Сообщения: 17
Зарегистрирован: Вт 15 дек 2015 08:59

Re: Возвращаемый параметр процедуры Firebird

Сообщение 3Hub » Чт 17 мар 2016 22:05

Спасибо за поддержку, понял!

ViktorV
Devart Team
Сообщения: 212
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Возвращаемый параметр процедуры Firebird

Сообщение ViktorV » Пт 18 мар 2016 10:58

Рады слышать, что проблема решена. Обращайтесь к нам, если у Вас возникнут вопросы по UniDAC.

Закрыто