我在网上下了一个关于使用 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;
请高手过目,并指出存在的问题!!!!!
谢谢

解决方案 »

  1.   

    >>用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;