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