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

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

Как отобразить 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;


Наверх

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