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

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

Преобразование TBlobStream в TStream


Amateur ©   (2007-03-27 12:43:00) 

Подскажите как это реализовать? У меня получалось только таким образом: в Memo записывал из BlobStream:

Memo1.Lines.LoadFromStream...

а потом от туда в TStream:

Memo1.Lines.SaveToStream...

Скажите, можно ли както без таких ухищрений загрузить данные из TBlobStream в TStream?


icWasya   (2007-03-28 10:15:00) [1]

А зачем вообще приводить к TMemoryStream


Amateur   (2007-03-28 06:24:00) [2]

Сейчас загружаю в TWebBrowser страницы в MHT-формате из блоб полей БД. Некоторые размером 0.5 МБ. Все работает отлично, для других целей эту конструкцию ( ..TMemoryStream(Table1.CreateBlobStream...) юзать не буду...


Плохиш   (2007-03-27 15:08:00) [3]


> Amateur   (27.03.07 14:19) [12]
> Объясните плиз, какие могут быть проблемы при этом?

Представляешь, ты решил подарить другу плавки, а размер померил у его сестры.


Amateur   (2007-03-27 14:19:00) [4]

Объясните плиз, какие могут быть проблемы при этом?


icWasya   (2007-03-27 13:53:00) [5]

Вот так лучше не делать
Ms:=TMemoryStream(Table1.CreateBlobStream(Table1.FieldByName('Info'),bmRead));


Amateur   (2007-03-27 13:24:00) [6]

Всем спасибо большое!!!!
Разобрался как грузить, все виды стримов из DataSet'a:

var
S: TStream;
Bs: TBlobStream;
Ms: TMemoryStream;

S:=Table1.CreateBlobStream(Table1.FieldByName('Info'),bmRead);
Bs:= TBlobStream(Table1.CreateBlobStream(Table1.FieldByName('Info'),bmRead));
Ms:= TMemoryStream(Table1.CreateBlobStream(Table1.FieldByName('Info'),bmRead));

Нуб я нуб )))
Спасибо еще раз всем за ответы )))


Reindeer Moss Eater   (2007-03-27 13:19:00) [7]

Нельзя потому, что экземпляров TStream создавать нельзя.
Нельзя создавать экземпляры - нельзя грузить в несозданные экземпляры.


ЮЮ   (2007-03-27 13:13:00) [8]

Прям в Неlpe. Create, CreateBlobStream, Edit example.

The following example copies the data in the Notes field of Table1 or SQLDataSet1 to the Remarks field of ClientDataSet1.

Windows-only:

procedure TForm1.Button1Click(Sender: TObject);

var
 Stream1: TBlobStream;
 Stream2: TStream;
begin
 Stream1 := TBlobStream.Create(Table1Notes, bmRead);
 try
   ClientDataSet1.Edit;
   { here’s a different way to create a blob stream }
   Stream2 := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName('Remarks'), bmReadWrite);
   try
     Stream2.CopyFrom(Stream1, Stream1.Size);
     ClientDataSet1.Post;
   finally
     Stream2.Free;
   end;

 finally
   Stream1.Free;
 end;
end;

Cross-platform:

procedure TForm1.Button1Click(Sender: TObject);

var
 Stream1, Stream2 : TStream;
begin
 Stream1 := SQLDataSet1.CreateBlobStream(SQLDataSet1.FieldByName('Notes', bmRead);
 try
   ClientDataSet1.Edit;
   Stream2 := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName('Remarks'), bmReadWrite);
   try
     Stream2.CopyFrom(Stream1, Stream1.Size);
     ClientDataSet1.Post;
   finally
     Stream2.Free;
   end;
 finally
   Stream1.Free;
 end;

end;


P.S. Где тебе не удаеися воспользоваться  TBlobstream, что возникает необходимость вп втором TMemoryStream. Так разве не работает?

bs := Table1.CreateBlobStream(Table1.FieldByName('Info'),bmRead);
bs.Position := 0;
B.loadfromstream(bs);


Desdechado   (2007-03-27 13:12:00) [9]

Если почитать справку, то TTable.CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
Надеюсь, дальше понятно?


Amateur   (2007-03-27 13:08:00) [10]

var
A: TBlobStream;
B: TMemoryStream;
begin
A <-- из DataSet'a
...
нужно: B <-- A


у B есть B.loadfromstream...
у A нет...

ну что совсем никак чтоли....


Amateur   (2007-03-27 12:59:00) [11]

Ну а в TMemoryStream ?
Почему нельзя? В memo загружаю из Blobstream. Читаю в MemoryStream из этого же мемо. Но это лишние торомза. Неужели никак??


MBo   (2007-03-27 12:55:00) [12]

Прочитай [1] внимательно
Кроме того, сам по себе TStream - абстрактный класс.


Reindeer Moss Eater   (2007-03-27 12:55:00) [13]

Нельзя.


Amateur   (2007-03-27 12:51:00) [14]

Тогда подскажите пожалуйста а можно из БД загрузить в TSream данные?
Я в TBlobStream гружу
 
var
Bs: TBlobStream;
begin
Bs:=TBlobStream(Table1.CreateBlobStream(Table1.FieldByName('Info'),bmRead));
Bs.Free;
end;


А данные нужны мне в TStream. Подскажите как такое же сделать в TStream пожалуйста...


Desdechado   (2007-03-27 12:45:00) [15]

TBlobStream - это наследник Tstream
так что нет необходимости их преобразовывать


Наверх

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