![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отобразить OLE-поле из таблицы Access? [D6]
SnapIn © (2005-12-11 13:28:00)Подскажите пожалуйста, как отобразить OLE-поле (Документ MSWord) из таблицы Access?
Я полагаю, что отображать содержимое поля нужно будет в OleContainer1, а как это содержимое считать из таблицы (ADOTable)?
sniknik (2005-12-12 18:09:00) [1]> там WORD'овские файлылежат!
пофигупринцип тот же! префикс или есть или нет, в зависимости от того чем ложиш.
> если твой способ не поможет
это не мой способ, и вообще не готовое решение, это просто попытка показать в чем может быть проблема. (которую ты можеш как проверить так и проигнорировать)
SnapIn (2005-12-12 17:55:00) [2]2 sniknik ©
Ложил туда данные не я... там WORD'овскиефайлы лежат!
А мне их теперь отобразить нужно... я уже думаю, если твой способ не поможет, может их просто переложить ручками в BLOB-поля Firebird'a?!...
sniknik (2005-12-11 14:25:00) [3]сорри 82 байта
procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet);
var
Stream: TMemoryStream;
Pref: Word;
jp: TJPEGImage;
bm: TBitmap;
begin
Stream:= TMemoryStream.Create;
try
TBLOBField(ADODataSet1.FieldByName('ImField')).SaveToStream(Stream);
if Stream.Size <> 0 then begin
Stream.Position:= 0;
Stream.ReadBuffer(Pref, 2);
case Pref of
$4D42: begin
DBImage1.DataSource:= DataSource1;
bm:= TBitmap.Create;
bm.Width:= 121;
bm.Height:= 121;
Image1.Picture.Bitmap:= bm;
bm.Free;
end;
$D8FF: begin
jp:= TJPEGImage.Create;
Stream.Position:= 0;
jp.LoadFromStream(Stream);
Image1.Picture.Graphic:= jp;
jp.Free;
end;
$1C15: begin
Stream.Position:= 82;
Image1.Picture.Bitmap.LoadFromStream(Stream);
end;
end;
end;
finally
Stream.Free;
end;
end;
вот это вот, выделенное читает BMP формат такого вот "затянутого" в аксессе BMP файла в OLE поле. (первые 2 положенные самой програме также через стрим и соответственно без префикса, причем первое подсовывает стандартный DBImage)
sniknik (2005-12-11 14:13:00) [4]> OleContainer1.LoadFromStream(AStream); // <-- Здесь: INVALID STREAM FORMAT
а ложил в поле как? если "обратным" от этого методом...то чтото не то. а если в самом Access-е (перетяну документ в поле с проводника) то правильно, Access префикс пишет (92байта) определяющий тип OLE.
SnapIn (2005-12-11 13:48:00) [5]Вот мои попытки:
procedure TForm1.Button1Click(Sender: TObject);
var
AStream: TStream;
Data: Integer;
Begin
AStream := TStream(tbTable1.CreateBlobStream(tbTable1.FieldByName('ole_field'), bmRead));
AStream.Read(Data, SizeOf(Data));
OleContainer1.LoadFromStream(AStream); // <-- Здесь: INVALID STREAM FORMAT
AStream.Free;
end;