Вниз
Скачать: CL | DM;

Как отобразить OLE-поле из таблицы Access?   Найти похожие ветки 

 
SnapIn   (2005-12-11 13:28) [0]

Подскажите пожалуйста, как отобразить OLE-поле (Документ MSWord) из таблицы Access?

Я полагаю, что отображать содержимое поля нужно будет в OleContainer1, а как это содержимое считать из таблицы (ADOTable)?


 
SnapIn   (2005-12-11 13:48) [1]

Вот мои попытки:


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;


 
sniknik ©   (2005-12-11 14:13) [2]

> OleContainer1.LoadFromStream(AStream); // <-- Здесь: INVALID STREAM FORMAT
а ложил в поле как? если "обратным" от этого методом...то чтото не то. а если в самом Access-е (перетяну документ в поле с проводника) то правильно, Access префикс пишет (92байта) определяющий тип OLE.


 
sniknik ©   (2005-12-11 14:25) [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)


 
SnapIn   (2005-12-12 17:55) [4]

2 sniknik ©

Ложил туда данные не я... там WORD"овские файлы лежат!
А мне их теперь отобразить нужно... я уже думаю, если твой способ не поможет, может их просто переложить ручками в BLOB-поля Firebird"a?!...


 
sniknik ©   (2005-12-12 18:09) [5]

> там WORD"овские файлы лежат!
пофигу принцип тот же! префикс или есть или нет, в зависимости от того чем ложиш.

> если твой способ не поможет
это не мой способ, и вообще не готовое решение, это просто попытка показать в чем может быть проблема. (которую ты можеш как проверить так и проигнорировать)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
6-1131060033
AmsterMan
2005-11-04 02:20
2006.02.12
Как прогарммно удалить все куки IE


3-1134388793
WG
2005-12-12 14:59
2006.02.12
После индексирования dbf-файла некорректно работает select (SQL)


15-1137613460
DiamondShark
2006-01-18 22:44
2006.02.12
Вопрос москвичам или питерцам


3-1134387150
Asker
2005-12-12 14:32
2006.02.12
Клонировать Блоб


2-1138080657
Janbolat
2006-01-24 08:30
2006.02.12
FTP-Админ как?




   Наверх