关心所有德尔福大师:)
我在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 我读到它应该在单位和使用。我不明白这是什么意思。 我应该在安装文件夹上添加一些内容还是什么?
任何帮助都将不胜感激。
谢谢
答案 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;