急急急!!!! 关于 DBImage 在 Access 中的使用问题

SEFoxTrade 2005-03-18 02:10:47
我在网上下了一个关于使用 Image 读取 Access 中 OLE 类型字段的程序代码
想用来读取我的库中的 OLE 类型字段,这个字段是保存 BMP 图片的,名称为 Photo
可是下载的程序代码总是报错“位图图像无效”
而我的库设计和图片格式均正确

不知何故,请高手分析一下


以下是我下载的代码部分

是用于处理 OLE 字段的过程
procedure LoadImageFromField(APicture: TPicture; AField: TBlobField);
var
ABitmap: TBitmap;
AStream: TMemoryStream;
begin
if AField.IsNull then
Exit;

AStream := TMemoryStream.Create;
try
AField.SaveToStream(AStream);

// Skip OLE storage header
AStream.Seek(78, soFromBeginning);
ABitmap := TBitmap.Create;
try
ABitmap.LoadFromStream(AStream);
APicture.Graphic := ABitmap;
finally
ABitmap.Free;
end;
finally
AStream.Free;
end;
end;

经查,错误总是出现在 ABitmap.LoadFromStream(AStream);
将此行删除,程序可以正常运行,但没有图片显示

在 ADODataSet1 的 AfterScroll 事件中呼叫 LoadImageFromField 函式:

procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet);
begin
LoadImageFromField(
Image1.Picture,
DataSet.FieldByName('Photo') as TBlobField
);
end;


请高手过目,并指出存在的问题!!!!!
谢谢
...全文
75 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mrkang 2005-03-18
  • 打赏
  • 举报
回复
>>用Image,不用DBimage
procedure TForm3.Button1Click(Sender: TObject);
var
s:TMemoryStream;
begin
If Opendialog1.Execute then
begin
s:=TMemoryStream.Create;

try
Image1.Picture.LoadFromFile(opendialog1.filename);
image1.Picture.Graphic.SaveToStream(s);
Form2.ADOQuery1.Edit;
s.Position:=0;
TblobField(Form2.ADOQuery1.FieldByName('照片')).loadfromstream(s);
Form2.ADOQuery1.Post;
Finally
s.Free;
end;
end;
end;

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧