Oracle, Delphi 7, ADO, out ref cursor
От: Andrew Россия http://localhost
Дата: 30.05.03 08:01
Оценка:
Прелюдия:

Есть оракловый пакетик с процедурой, возвращающей открытый курсор:


create or replace package body defs is
 
procedure p_staff( xuserid in integer, xdataset out defs.dataset)
is
begin
 open xdataset for
   select s.rowid, s.vcfirstname,   s.vcsecondname
      from staff s
    where s.iuserid = xuserid;  
end;
   
begin
 null;
end defs;


Есть процедурка на Дельфе (7), которая через ADO дергает эту процедуру и передает данные из курсора в TADODataSet:


procedure TfmMain.ButtonClick(Sender: TObject);
var
 Con : _Connection;
 Cmd : _Command;
 Prm : _Parameter;
 Rst : _Recordset;
 RCount : OleVariant;
begin
 RCount := 0;
 Con := CoConnection.Create;
 Con.ConnectionString := 'Provider=OraOLEDB.Oracle.1;'+
                         'Persist Security Info=False;'+
                         'User ID=dbo;Password=111;'+
                         'Data Source=src';
 Con.Open(Con.ConnectionString,'','',0);
 Cmd := ADODB_TLB.CoCommand.Create;
 Cmd.Set_ActiveConnection(Con);
 Cmd.CommandType := ADODB_TLB.adCmdText;
 Cmd.Properties['PLSQLRSet'].Value := True;
 Cmd.CommandText := '{ CALL DEFS.P_STAFF(?) }';
 Prm := Cmd.CreateParameter('XUSERID',adInteger,adParamInput,4,10);
 Prm.Value := 10;
 Cmd.Parameters.Append(Prm);
 Rst := Cmd.Execute(RCount,EmptyParam,adOptionUnspecified);
 Rst.Close;
 Rst.CursorLocation := adUseClient;
 Rst.CursorType := adOpenStatic;
 Rst.LockType := adLockOptimistic;
 Rst.Open(EmptyParam,EmptyParam,adOpenDynamic,adLockOptimistic,adOptionUnspecified);
 DataSet.Recordset := ADOInt.Recordset(Rst);
end;


Результат : все сказочно, за исключением того, что рекордсет только для чтения.

Вопрос:

В чем грабель?
Сотрудничества нет, есть взаимное паразитирование... (С)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.