![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение курсора (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.