![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка из BLOB поля в OleContainer [D7, IB4.x, IB5.x, IB6.x]
Snip © (2004-11-19 17:31:00)Привет Всем! Такая проблема, загружаю через поток из BLOB поля IB в поток, а из него в OleContainer, при загрузки в контейнер вылетает ошибка Out of memory. Что такое может быть такое?
Fran (2004-11-21 12:23:00) [1]Я делаю так:
1. создать поток
2. записвть в него BLOB
3. сохраняю поток в файл
4. загрузить из файла Ole
5. удаляю файл с диска
загрузить документ в OLE сразу не получается из-за разных Windows-ов и офисов у клиентов, только через файл все работает надежно.
Пример кода:
procedure btnReadBlobClick(Sender: TObject);
var
A : TStream;
B : TMemoryStream;//FIBBlob
begin
// Blob_Ole - OleConteiner
if not (Blob_Ole.State in [osEmpty])
then Blob_Ole.DestroyObject;
try
Screen.Cursor := crHourGlass;
with quGetBlob do begin
Close;
SelectSQL.Clear;
SelectSQL.Add('SELECT BLOBBIN FROM INHFOTO');
SelectSQL.Add('WHERE REC_NO = '+IntToStr(nRecBlob));
Open;
Edit;
A := CreateBlobStream(FieldByName('BLOBBIN'), bmRead);// as TBlobField
A.Position := 0;
B := TMemoryStream.Create;
B.LoadFromStream(A);
B.Position := 0;
B.SaveToFile(gsCurrDirZAGS+'Tmpfiles\'+sFileNameBlob);
B.Position := 0;
Blob_Ole.CreateObjectFromFile(gsCurrDirZAGS+'Tmpfiles\'+sFileNameBlob,False);
Blob_Ole.Visible := True;
Blob_Ole.Hint := sDescBlob+#10#13+'Ôàéë: '+sFileNameBlob;
Close;
end;//with dmMain.quGetBlob
finally
DeleteFile(gsCurrDirZAGS+'Tmpfiles\'+sFileNameBlob);
B.Free;
A.Free;
Screen.Cursor := crDefault;
end;//try
end;//if trvListBlob.Selected.Data nil
end;
Johnmen (2004-11-21 02:29:00) [2]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1100439265&n=1
Snip (2004-11-20 13:10:00) [3]Вот, делаю уже так:
var
Table: TIBTable;
begin
try
try
Table:=TIBTable.Create(Application);
Table.Database:=DM.IBDatabase;
Table.TableName:='ITEMS';
Table.Open;
Table.Filter:='id = '+IntToStr(Integer(ListView.Selected.Data));
Table.Filtered:=True;
OleContainer.LoadFromStream(Table.CreateBlobStream(TBLOBField(Table.FieldByName('ole')), bmRead));
except
end;
finally
if Assigned(Table) then
Table.Free;
end;
end;
Snip (2004-11-20 13:08:00) [4]
if Assigned(Stream) then
Stream.Free;
Лишнее :))))
Snip (2004-11-20 13:07:00) [5]
var
Table: TIBTable;
begin
try
try
Table:=TIBTable.Create(Application);
Table.Database:=DM.IBDatabase;
Table.TableName:='ITEMS';
Table.Open;
Table.Filter:='id = '+IntToStr(Integer(ListView.Selected.Data));
Table.Filtered:=True;
OleContainer.LoadFromStream(Doc.CreateBlobStream(TBLOBField(Table.ieldByName('ole')), bmRead));
except
end;
finally
if Assigned(Stream) then
Stream.Free;
if Assigned(Table) then
Table.Free;
end;
end;
Sergey_Masloff (2004-11-19 22:30:00) [6]>Что такое может быть такое?
В 17 строке посмотри...
На самом деле неплохо глянуть код как ты это делаешь ;-)