Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Сохранение в Blob поле .... [ABsolute DB]


Автор: RA 5.12.2004, 07:40
Мне нужно переодически сохранять в Blob инфу из дерева TreeView,
для этого я сохраняю дерево в фаил (SaveToFile), а потом добавляю этот фаил в Blob
Код

FileStream := TFileStream.Create('MyFile',fmOpenRead or fmShareDenyNone);

Мне хотелосьбы сохранять инфу из TreeView в блоб минуя процесс сохранения из TreeView во временный фаил.

Быть может это делается както с помощью TreeView.SaveToStream ...
но что-то у меня не получилось.



Вот код того как это выглядит у меня:
Код

Procedure TForm1.SaveTreeCatalogs;
var
 FileStream: TFileStream;
 BlobStream: TStream;

 begin
    OnAfterPost:=false;

    TreeView1.SaveToFile(DB_FUNCS.GetTempDir+'CATALOGS.TXT');
    ABSTable1.TableName:='tbTreeView';

    ABSTable1.Open;
    ABSTable1.Edit;

      BlobStream := ABSTable1.CreateBlobStream(ABSTable1.FieldByName('DaTreeView'),bmWrite);
      FileStream := TFileStream.Create(DB_FUNCS.GetTempDir+'CATALOGS.TXT',fmOpenRead or fmShareDenyNone);
      BlobStream.CopyFrom(FileStream,FileStream.Size);

      FileStream.Free;
      BlobStream.Free;
      ABSTable1.Post;

   ABSTable1.Close;
end;









Автор: Vit 5.12.2004, 15:39
Не знаком не с этой базой ни с этими компонентами, но на вскидку

Код

...
   TreeView1.SaveToStream(MemoryStream);
   MemoryStream.position:=0;
...
  (ABSTable1.fieldbyname('DaTreeView') as TBlobField).loadfromstream(MemoryStream);

Автор: RA 5.12.2004, 18:09
Увы! не работает! smile

Автор: Vit 6.12.2004, 00:21
Покажи весь код который не работает

Автор: RA 6.12.2004, 00:29
Код




Procedure TForm1.SaveTreeCatalogs;
var
FileStream: TFileStream;
BlobStream: TStream;
MemoryStream:TMemoryStream;
begin
   OnAfterPost:=false;
   ABSTable1.TableName:='tbTreeView';

   ABSTable1.Open;
   ABSTable1.Edit;

    { BlobStream := ABSTable1.CreateBlobStream(ABSTable1.FieldByName('DaTreeView'),bmWrite);
     FileStream := TFileStream.Create(DB_FUNCS.GetTempDir+'CATALOGS.TXT',fmOpenRead or fmShareDenyNone);
     BlobStream.CopyFrom(FileStream,FileStream.Size); }

TreeView1.SaveToStream(MemoryStream);
  MemoryStream.position:=0;



 (ABSTable1.fieldbyname('DaTreeView') as TBlobField).loadfromstream(MemoryStream); //Ошибка вылетает тут.


     MemoryStream.Free;
     FileStream.Free;
     BlobStream.Free;
     ABSTable1.Post;

  ABSTable1.Close;
end;


Автор: Vit 6.12.2004, 00:41
Код

Procedure TForm1.SaveTreeCatalogs;
var
FileStream: TFileStream;
BlobStream: TStream;
MemoryStream:TMemoryStream;
begin
  OnAfterPost:=false;
  ABSTable1.TableName:='tbTreeView';

  ABSTable1.Open;
  ABSTable1.Edit;
 
 MemoryStream:=TMemoryStream.Create; //!!!!!
TreeView1.SaveToStream(MemoryStream);
 MemoryStream.position:=0;



(ABSTable1.fieldbyname('DaTreeView') as TBlobField).loadfromstream(MemoryStream); //Ошибка вылетает тут. - удивительно что не на предыдущей строке....


    MemoryStream.Free;
    FileStream.Free;
    BlobStream.Free;
    ABSTable1.Post;

 ABSTable1.Close;
end;


Добавлено @ 00:42
И какого типа поле 'DaTreeView'? Может там надо memo использовать?

Автор: RA 6.12.2004, 12:23
Vit

MemoryStream:=TMemoryStream.Create;
Я использовал просто забыл в ответе вписать тк. вставку делал
из своего поста.



Вообщем после удаления не юзабельных

FileStream.Free;
BlobStream.Free;

Всё заработало. smile

Спосибо за код.



Автор: Vit 6.12.2004, 16:44
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)