Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как получить из ХП набор данных и OUTPUT параметр?


Автор: tikskit 16.1.2013, 14:09
Есть ХП, которая имеет IN и OUTPUT параметры. Кроме того, она возвращает набор данных. Требуется на клиенте получить и набор данных и значение OUTPUT параметра.

Код

function GetData(const EntityCode: Int64): Integer;
var
  Proc: TADOStoredProc;

  PEntityCode: ADODB.TParameter;
  PRowsCount: ADODB.TParameter;
begin
  Proc := TADOStoredProc.Create(nil);
  try
    Proc.Connection := ADOConnection1;
    Proc.CursorLocation := clUseServer;
    Proc.ProcedureName := 'MyStoredProc';

    PEntityCode := Proc.Parameters.AddParameter;
    PEntityCode.Name := '@EntityCode';
    PEntityCode.DataType := ftLargeint;
    PEntityCode.Value := EntityCode;

    PRowsCount := Proc.Parameters.AddParameter;
    PRowsCount.Name := '@TotalCount';
    PRowsCount.DataType := ftInteger;
    PRowsCount.Direction := pdOutput;
    Proc.Prepared := True;

    Proc.ExecProc;
    Result := PRowsCount.Value;
    while not Proc.Eof do
    begin
      Proc.Next;
    end;
  finally
    Proc.Free;
  end;

end;


В этом случае значение PRowsCount.Value определяется правильно, но возвращаемый набор данных пуст.
Если убрать Proc.Prepared := True и вместо Proc.ExecProc сделать Proc.Open, то значение PRowsCount.Value равно нулю, но набор данных не пустой.

Автор: kami 16.1.2013, 18:11
Сперва получить данные из набора, потом закрыть набор и забрать выходной параметр.
До закрытия выходные параметры недоступны не определены, по крайней мере в MSSQL

Автор: tikskit 16.1.2013, 18:24
kami, огромное спасибо! Замучился с этим!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)