0

向所有德尔福大师致敬 :)

我在 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 我读到它应该在单位中使用。我不明白那是什么意思。我应该在安装文件夹上添加一些东西还是什么?

任何帮助将不胜感激。

谢谢你

4

1 回答 1

2

该字段还包含一个 OLE 标头。我以前跳过了这个(我认为是前 79 个字节),但我再也找不到代码了。但是,互联网一如既往地有解决方案。恕我直言,这个比我的“跳过”解决方案更好。

这是其中之一:如何从/向访问数据库读取和写入图像(第 4 页)

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

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

这不是有效的 delphi 语法,而且相当混乱。该Picture.Assign方法需要一个图片对象。因此,您首先要做的是从访问数据库中获取图片。

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

按照链接中的步骤操作。

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

 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;
于 2013-07-05T05:43:38.637 回答