Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема с чтением параметров хранимой процедуры в Delphi XE7: переезд с BDE на FireDac

Delphi , Базы данных , Interbase

При переходе с Delphi 4 и BDE на Delphi XE7 и BDE, разработчики могут столкнуться с проблемами, связанными с использованием компонента TStoredProc. В частности, при вызове хранимой процедуры, которая не возвращает значения в параметрах, может возникнуть ситуация, когда значения в параметрах остаются нулевыми. Это может быть связано с особенностями обработки параметров в новых версиях Delphi.

Описание проблемы

Разработчик столкнулся с проблемой, при которой после вызова метода ExecProc у компонента TStoredProc параметры, которые должны были быть заполнены хранимой процедурой, оставались не измененными (с нулевыми значениями) в Delphi XE7. В то время как в Delphi 4 все работало корректно.

Шаги для воспроизведения проблемы

  1. Создание нового проекта в Delphi XE7.
  2. Добавление компонентов TDatabase и TStoredProc.
  3. Настройка соединения с базой данных Firebird.
  4. Выбор хранимой процедуры в дизайнере.
  5. В коде формы в событии FormShow выполнение следующего кода:
if not Database1.Connected then
  Database1.Connected := True;
with VerifUser2 do
begin
  DatabaseName := Database1.DatabaseName;
  Params[0].AsInteger := 1;
  Params[1].AsString := 'nico';
  Params[2].AsString := '';
  ExecProc;
  ShowMessage(ParamByName('IP_USER').AsString);
end;

Ожидается, что параметр ParamByName('IP_USER') или Params[3] будет содержать значение, возвращаемое хранимой процедурой, но фактически оба параметра имеют значение 0.

Обновление 1: Код хранимой процедуры

В контексте обновления 1 приведен SQL код хранимой процедуры PROC_VERIF_USER, которая возвращает несколько параметров, включая IP_USER.

ALTER PROCEDURE PROC_VERIF_USER (
  XID_MASTER Integer,
  XLOG Varchar(20),
  XPASS Varchar(13) )
RETURNS (
  IP_USER Integer,
  IP_PROFIL Integer,
  LIB_USER Varchar(50),
  LOG_USER Varchar(20),
  PASS_USER Varchar(13),
  ERR_MSG Varchar(100) )
AS
  ...
  -- код процедуры
  ...
end^

Процедура работает корректно как в Delphi 4 с BDE, так и в Delphi XE7 с FireDac, что исключает проблему в самом коде процедуры.

Обновление 2: Использование TQuery и SELECT * FROM PROC_VERIF_USER

Разработчик также упоминает, что добавление suspend в хранимую процедуру и использование TQuery для выполнения запроса SELECT * FROM PROC_VERIF_USER(:master,:username,:password) с чтением данных через FieldByName() привело к успешному результату. Это указывает на проблему, связанную с компонентом TStoredProc в BDE.

Подтвержденное решение

После ряда испытаний было обнаружено, что замена типов данных параметров с Params[x].AsString на Params[x].AsAnsiString решает проблему. Это простое изменение в коде позволяет корректно читать параметры хранимой процедуры после вызова ExecProc.

Пример кода с решением

if not Database1.Connected then
  Database1.Connected := True;
with VerifUser2 do
begin
  DatabaseName := Database1.DatabaseName;
  Params[0].AsInteger := 1;
  Params[1].AsAnsiString := 'nico';
  Params[2].AsAnsiString := '';
  ExecProc;
  ShowMessage(ParamByName('IP_USER').AsString); // Теперь должен отображать корректное значение
end;

Заключение

Переход на новые версии Delphi может сопровождаться различными проблемами, в том числе и связанными с использованием компонентов BDE. В данном случае, проблема была решена путем изменения типа данных параметров, что позволило корректно работать с хранимой процедурой в Delphi XE7.

Создано по материалам из источника по ссылке.

Разработчик столкнулся с проблемой чтения параметров хранимой процедуры в Delphi XE7 после перехода с BDE на FireDac, где значения параметров оставались нулевыми после вызова `ExecProc`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Interbase ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 09:36:35/0.0035779476165771/0