我现在从blob中取数据,为什么出现“metafile is not valid”的错误,源码如下:
f:=Tmemorystream.Create;
try
tblobfield(query1.FieldByName('image')).SaveTostream(f);
 boxmf.LoadFromstream(f);   //出错的地方
 finally
  f.free;
  end;
同时,我把它按照下面这样操作,元文件却可以正常显示:
try
tblobfield(query1.FieldByName('image')).SaveTofile('..\ljb.emf');
boxmf.LoadFromfile('..\ljb.emf');
finally
deletefile('..\ljb.emf');
end;
请高手帮我分析一下,万分感谢!!!

解决方案 »

  1.   

    书上的:)
    procedure TForm1.btnShowBlobsClick(Sender: TObject);
    var
    sFileName: String;
    BS : TADOBlobStream;
    begin
    BS :=
    TADOBlobStream . Create(TBlobField(adodsBlobs.FieldByName('Blobs')) ,
    bmRead) ;
    try
    sFileName := ExtractFilePath(Application.ExeName)+'tmpBlob';
    sFileName := sFileName + '.' +
    adodsBlobs.FieldByName('Extension').AsString;
    BS.SaveToFile(sFileName) ;
    OleContainer1.CreateObjectFromFile(sFileName, False);
    finally // wrap up
    BS.Free ;
    end ; // try/finally
    end ;
      

  2.   

    一个定义的元文件对象,我是想直接把blob从数据库中读到内存流中,然后初始化
    boxmf(boxmetafile)。我觉得可能是数据格式的问题,但我是用内存流的格式存进去的