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

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

Загрузка из 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 строке посмотри...
На самом деле неплохо глянуть код как ты это делаешь ;-)


Наверх

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