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

Откуда:
Сообщений: 54
День добрый!!

Возникла следующая проблема.
На сервере есть пакет с функцией, возвращающий результирующую выборку
  Procedure GetClient( Cur Out TCursor, id in integer ) is begin
    Open Cur For 
      select * from vCLients where vCLients.CLIENTS_ID = id;
  end;

на выходе функции получаем курсор, вся проблема в том, что если этот пакет вызывать в программе
  oraQuery1.SQL.Clear;
  oraQuery1.SQL.Text := 'begin reportapi.getclient( :cur, :id ); end;';
  oraQuery1.ParamByName('cur').DataType := ftCursor;
  oraQuery1.ParamByName('id').AsInteger := 1181;
  oraQuery1.Execute;
код отрабатывает на ура - выборка возвращается, все отлично, но если этот код перенести в длл -
  var
    oraQuery: TOraQuery;
    oraSQL: TOraSQL;
begin
  oraQuery := TOraQuery.Create( Application );
  oraQuery.Session := указатель на TOraSession;

  oraSQL := TOraSQL.Create( Application );
  oraSQL.Session := oraQuery.Session;

  oraSQL.SQL.Clear;
  oraSQL.SQL.Text := 'begin reportapi.getclient( :cur, :id ); end;';
  oraSQL.ParamByName('cur').DataType := ftCursor;
  oraSQL.ParamByName('id').AsInteger := 1181;
  oraSQL.Prepare;
  oraSQL.Execute;//в трассировке пакет открывается и выборка на руках

  oraQuery.Close;
  oraQuery.Cursor := oraSQL.ParamByName('cur').AsCursor;//здесь все ложиться не входя в след.строку
  oraQuery.Open;

то oraQuery.Cursor := oraSQL.ParamByName('cur').AsCursor; при перехвате курсора получаем вылет с текстом ошибки "Invalid class typecast"(в дизайнтайме этот код работает - здесь отказывается).

Клиент и длл написаны на Delphi 7
Сервер субд - Oracle10g
Компоненты доступа - odac670045

С одаком и ораклом в целом работаю не так давно, возможно где то не докрутил (

Кто сталкивался с подобным подскажите пожалуйста в чем ошибка!
10 сен 10, 14:04    [9418616]     Ответить | Цитировать Сообщить модератору
 Re: Работа с курсором в DLL через ODAC  [new]
JaRo
Member

Откуда:
Сообщений: 1659
1) А с чего Вы решили, что Оракл причём? Там было написано ORA-...?
2) "в дизайнтайме этот код работает" - работает??? в дизайн-тайме?
3) Вы привели как бы разные куски кода, как можно говорить, что один работает, а другой не хочет?

Может на форуме Дельфи спросить как правильно работать с AsCursor этого компонента?..
10 сен 10, 14:39    [9419100]     Ответить | Цитировать Сообщить модератору
 Re: Работа с курсором в DLL через ODAC  [new]
StrangerTK
Member

Откуда:
Сообщений: 54
JaRo
1) А с чего Вы решили, что Оракл причём? Там было написано ORA-...?
2) "в дизайнтайме этот код работает" - работает??? в дизайн-тайме?
3) Вы привели как бы разные куски кода, как можно говорить, что один работает, а другой не хочет?

Может на форуме Дельфи спросить как правильно работать с AsCursor этого компонента?..


1. По логике компоненты доступа работают именно с ораклом
2. Насчет диз.тайма глупость сморозил - мозги уже дымятся, извиняюсь
3. По поводу разных кусков кода,
 oraQuery1.SQL.Clear;
  oraQuery1.SQL.Text := 'begin reportapi.getclient( :cur, :id ); end;';
  oraQuery1.ParamByName('cur').DataType := ftCursor;
  oraQuery1.ParamByName('id').AsInteger := 1181;
  oraQuery1.Execute;
приводил к виду
  oraQuery := TOraQuery.Create( Application );
  oraQuery.Session := OSession;

  oraQuery.SQL.Clear;
  oraQuery.SQL.Text := ' begin reportapi.getclient( :cur, :id ); end; ';
  oraQuery.Params.ParamByName( 'cur' ).DataType := ftCursor;
  oraQuery.Params.ParamByName( 'id' ).AsInteger := 1181;
  oraQuery.Execute;
Результат, тот же просто привел вариант который можно встретить при работе в программе, не длл вариант.
10 сен 10, 14:57    [9419296]     Ответить | Цитировать Сообщить модератору
 Re: Работа с курсором в DLL через ODAC  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Здесь проблемы Delphi - на том форуме и надо спрашивать
10 сен 10, 15:00    [9419341]     Ответить | Цитировать Сообщить модератору
 Re: Работа с курсором в DLL через ODAC  [new]
StrangerTK
Member

Откуда:
Сообщений: 54
Проблема решена

Надеюсь информация будет полезной
https://www.sql.ru/forum/actualthread.aspx?bid=20&tid=788747
10 сен 10, 16:07    [9420157]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить