Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение курсора (c BLOB )из Хранимой процедуры ORACLE в BDE


Axelrodm ©   (2004-06-13 13:39:00) 

ORACLE 8i
CLIENT-SERVER

Имеется Хр. Прос. возвращающая BLOB.


PACKAGE ManageBlob AS
  TYPE tAbstract IS REF CURSOR;
..................................
procedure GetBlobFromTable(ID IN Integer, TableName in varchar, CUR IN out tAbstract) is
     BL BLOB:=NULL;
  ID_COL varchar2(250);
  begin
     ID_COL:=GetPrimKeyCol(TableName);
     open CUR for
    ' select * from '||TableName||'  where '||ID_COL||'='||ID;
  end GetBlobFromTable;


При обращении к ней через TStoredProcвозвращаются только 32К.

procedure TDMod.GET_BLOB (strm: TStream);
begin
  StProcGetBL.Close;
  StProcGetBL.ParamByName('ID').AsInteger:=ID_CH_BL;
  StProcGetBL.Open;
  QTmp:=StProcGetBL as tQuery;
  BL_F:=(StProcGetBL.FieldByName('NAME') as TBlobField);
  Bl_F.SaveToStream(Strm);
  StProcGetBL.Close;
end;


При работе с BLOB через TQuary все нормально

procedure TDMod.GET_BL_Ch_BL(strm: TStream);
var
  str: string;
begin
  str:='select * from CH_BL where CH_BL.ID='+IntToStr(ID_CH_BL);
('+IntToStr(ID_CH_BL)+') into :NAME  from  dual end;';
  CreSQLText(QTmp,str);
  QTmp.Open;
  BL_F:=(QTmp.FieldByName('NAME') as TBlobField);
  if strm = nil then
     exit;
  Bl_F.SaveToStream(Strm);
  QTmp.Close;
end;

Резултат одинаков в DELPHI5 и DELPHI7
В чем проблема?


Внук   (2004-06-13 23:49:00) [1]

А проблема, вероятно, в реализации TStoredProc. Точнее, в ее ограниченных возможностях при работе с Oracle. Сам сталкивался, например, с такой ситуацией, когда при работе в связке BDE->ODBC->Oracle через TStoredProc невозможно получить результирующее значение хранимой функции. Через TQuery все нормально.
 Вообще, видел где-то список всех багов TStoredProc, опубликованный Borland-ом, ссылку не помню, к сожалению. Там, например, сказано, что TStoredProc позволяет в хранимой процедуре иметь не более 10 параметров и т.д.
 Все вышесказанной относится к Delphi5.


Наверх

Титульная страница Поиск, карта сайта Написать письмо