Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 TOracleQuery и sys_refcursor  [new]
sergey4iki
Member

Откуда:
Сообщений: 5
имеется такой код
var t1, t2: TOracleQuery;
begin
  t1 := TOracleQuery.Create(self);
  t2 := TOracleQuery.Create(self);
  t1.Session := OracleSession1;
  t2.Session := OracleSession1;
  t1.SQL.Add('DECLARE   i   sys_refcursor;BEGIN   :i :='
      +'rs_value.pkg_search.search_cadnum (v_soato             => 1, '
      +'                                   v_blocknum          => 2, '
        +'                                 v_parcelnumber      => 3,'
          +'                               v_date              => TO_DATE'
            +'                                                       (''01.01.2017'', '
              +'                                                      ''dd.mm.yyyy''  ),'
                  +'                       v_isnb              => 1);END;');
  t1.DeclareVariable('i', otCursor);
  t1.SetComplexVariable('i', t2);
 
  t1.Execute;
 
  t2.Execute;
  while not t2.Eof do
  begin
 
          MessageDlg('Fetched: '+t2.FieldAsString('cost'), mtInformation, [mbOk], 0);
          next;
 end;

сама функция из оракла возвращает 5 записей, но почему то в делфи возвращает только 1, не могу понять в чем дело, причем в справке по ДОА такой же пример, практически
5 дек 17, 09:33    [21006153]     Ответить | Цитировать Сообщить модератору
 Re: ToracleQuery и sys_refcursor - Delphi БД  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2420
а надо next правильно писать...
5 дек 17, 09:45    [21006190]     Ответить | Цитировать Сообщить модератору
 Re: ToracleQuery и sys_refcursor - Delphi БД  [new]
sergey4iki
Member

Откуда:
Сообщений: 5
Tactical Nuclear Penguin,
мда..спасибо, не обратил внимаение еще потому что rowcount у t2 выдовало 1 запись
5 дек 17, 09:51    [21006209]     Ответить | Цитировать Сообщить модератору
 Re: ToracleQuery и sys_refcursor - Delphi БД  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 43610
Через датасет проще
хотя более ресурсоемко
var
  ses : TOracleSession;
  ods : TOracleDataSet;
  i : integer;
begin
  ses := TOracleSession.Create(Self);
  ses.LogonUsername := '**;
  ses.LogonDatabase := '**';
  ses.LogonPassword := '**';
  ses.Connected := true;
  ods := TOracleDataSet.Create(Ses);
  ods.Session := ses;
  ods.SQL.Text := 'begin open :p_cursor for select * from user_Tables; end;';
  ods.DeclareVariable('p_cursor', otCursor);
  ods.open;
  i := 0;
  while not ods.Eof do
  begin
    inc(i);
    ods.next;
  end;
  ShowMessage(inttostr(i)); // 329
5 дек 17, 10:04    [21006254]     Ответить | Цитировать Сообщить модератору
 Re: TOracleQuery и sys_refcursor  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23220
Там нет FetchAll?
5 дек 17, 10:39    [21006389]     Ответить | Цитировать Сообщить модератору
 Re: TOracleQuery и sys_refcursor  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 43610
wadman
Там нет FetchAll?
в каком места тама?
5 дек 17, 11:04    [21006518]     Ответить | Цитировать Сообщить модератору
 Re: TOracleQuery и sys_refcursor  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23220
andreymx
wadman
Там нет FetchAll?
в каком места тама?

Даже и не знаю... У сессии может?
5 дек 17, 11:32    [21006637]     Ответить | Цитировать Сообщить модератору
 Re: TOracleQuery и sys_refcursor  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 43610
wadman
andreymx
пропущено...
в каком места тама?

Даже и не знаю... У сессии может?
прошерстил все исходники - FetchAll нету
а что он должен делать?
5 дек 17, 13:11    [21007001]     Ответить | Цитировать Сообщить модератору
 Re: TOracleQuery и sys_refcursor  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2091
автор
while not ods.Eof do
begin
inc(i);
ods.next;
end;


это и есть fetchall, если что.
5 дек 17, 14:18    [21007352]     Ответить | Цитировать Сообщить модератору
 Re: TOracleQuery и sys_refcursor  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 43610
может, речь об этом?

TOracleDataSet.CountAllRecords
Declaration
propertyCountAllRecords: Boolean;
Description
When this property is set to True, the datasetwill first count the number of records that the
query will return, before fetching the records. This is useful when you do not want to
immediately fetch all records when the dataset is opened, but still want the RecordCount to
reflect the total number of records. The scroll bar in a TDBGrid will display the correct position
if CountAllRecords is True, or if QueryAllRecords is set to True. Setting both properties to True
is not useful.

или этом

TOracleDataSet.QueryAllRecords
Declaration
propertyQueryAllRecords: Boolean;
Description
When set to True, all records will be retrieved from the database when the dataset is opened.
When set to False, records are retrieved when a data-aware component or a program
requests it. If a query can return many records, set this property to False if initial response
time is important.
5 дек 17, 20:55    [21008737]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить