Есть ХП, которая имеет 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 равно нулю, но набор данных не пустой.
|