从Access到Delphi 7显示位图图像

时间:2013-07-05 04:43:19

标签: delphi ms-access

关心所有德尔福大师:)

我在Access 2010中有表,其中一个列类型是名为“ProductImage”的OLE对象 我使用该列来保存位图图像。

问题是,如何在Delphi 7中使用DBImage或TImage显示该图像? 我试过这个

procedure TF_Search2.DBGrid1CellClick(Column: TColumn); begin Image7.Picture.Assign(DataModule1.T_Products.FieldByName('ProductImage').LoadFromFile('c:\test.jpg')); end;

错误:需要此部分中的参数'LoadFromFile('c:\ test.jpg')' 我也试过使用“TBlobField”,但是我收到了错误:未声明的标识符TBlobField 我读到它应该在单位和使用。我不明白这是什么意思。 我应该在安装文件夹上添加一些内容还是什么?

任何帮助都将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:2)

该字段还包含OLE标头。我古代我跳过这个(我认为前79个字节)但我找不到代码了。但是,互联网一如既往地提供解决方案。 Imho这个比我的'skip'解决方案更好。

以下是其中一个:How to read and write images from/to an access DB (page 4)

编辑:我刚看到你的问题就是你的语法。

procedure TF_Search2.DBGrid1CellClick(Column: TColumn); 
begin 
  Image7.Picture.Assign(DataModule1.T_Products.FieldByName('ProductImage').LoadFromFile('c:\test.jpg')); 
end;

这不是有效的delphi语法,而且非常令人困惑。 Picture.Assign方法需要图片对象。所以你首先要做的是从access-DB中获取图片。

您想要从访问数据库中读取图像数据并将其显示在图像组件中吗?

按照链接中的步骤操作。

编辑:我确实发现了一些我修改过的旧代码(并且无法测试):

 aBitmapStream := TMemoryStream.Create;

 tblDrawing_BitmapColumnBLobField.SaveToStream (aBitmapStream);

 // This hack enables Access BMP-Blobs to be imported 
 aBitmapStream.Seek (78,soFromBeginning);
 myBitmap := TBitmap.Create;
 myBitmap.LoadFromStream (aBitmapStream);

 Image7.Picture.Assign (myBitmap);

 myBitmap.Free;
 aBitmapStream.Free;