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

Работа с хранимой процедурой в Delphi: вызов с параметрами ввода и вывода через ADO и Oracle

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

Вопрос пользователя заключается в том, как вызвать хранимую процедуру Oracle с параметрами ввода и вывода, используя компоненты ADO в среде Delphi. Пользователь столкнулся с ошибками при попытке создать параметр для вывода, что привело к ситуации "Catch-22", где отсутствие параметра вызывает одну ошибку, а его создание - другую.

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

Пользователь предоставил пример кода, в котором создается пакет CD_package с хранимой процедурой CDList, принимающей параметр ввода pCost и возвращающей курсор pList. В Delphi используется компонент TADOStoredProc для вызова этой процедуры, но при этом возникают ошибки, связанные с отсутствием или неправильной декларацией параметров.

Решение проблемы

Для решения проблемы пользователь нашел "решение" с использованием ODAC, что не является оптимальным, но позволило обойти проблему с использованием только ADO. В коде используется вспомогательный класс TCustomADODataSetHelper для присвоения данных из TMemDataSet и создания Recordset на основе XML-данных. Это позволяет работать с результатами выполнения хранимой процедуры.

Пример кода

uses
  System.Win.ComObj;

type
  TCustomADODataSetHelper = class helper for TCustomADODataSet
  public
    procedure AssignFrom(Source: TMemDataSet);
  end;

{ TCustomADODataSetHelper }

procedure TCustomADODataSetHelper.AssignFrom(Source: TMemDataSet);
var
  RS: Variant;
  Stream: TStringStream;
begin
  Stream := TStringStream.Create;
  try
    Source.SaveToXML(Stream);
    Stream.Position := 0;
    RS := CreateOleObject('ADODB.Recordset');
    RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
    Recordset := IUnknown(RS) as _Recordset;
  finally
    Stream.Free;
  end;
end;

procedure TForm8.FormCreate(Sender: TObject);
begin
  with OraStoredProc1 do
  begin
    StoredProcName := 'DDK.GetSystemSettings';
    Params.CreateParam(ftString, 'APrefix', TParamType.ptInput).Value := '';
    Params.CreateParam(ftCursor, 'ASettings', TParamType.ptOutput);
    Open;
  end;

  ADOStoredProc1.AssignFrom(OraStoredProc1);
  DataSource1.Dataset := ADOStoredProc1;
end;

Важные моменты

  • При работе с ADO и Oracle важно правильно определять типы параметров и их направление (ввод, вывод).
  • Использование ODAC может быть альтернативой для работы с хранимой процедурой Oracle, если ADO не позволяет достичь желаемого результата.
  • В коде выше представлен пример использования вспомогательного класса для интеграции данных между компонентами Delphi.

Заключение

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

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

Пользователь столкнулся с трудностями при вызове хранимой процедуры Oracle с параметрами ввода и вывода через ADO в среде Delphi и ищет решение этой проблемы, а также делится примером кода и предложенным методом с использованием ODAC для интегр


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

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




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


:: Главная :: Oracle ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 06:11:42/0.0052268505096436/1