想在SQL 2000里存取JPG图象,代码如下,通过主程序调用dll窗体,并在TImage显示出来,但到调用图象出来的时候总是提示地址出错。( Ado连接无问题,其它字段在同一窗体中可以正常显示)procedure Tdataform.IDPictClick(Sender: TObject); // 存图象
var Spict: TSaveDialog;
    pjpg:tjpegimage;
    pic:TMemoryStream;
begin
  Spict:=TSaveDialog.Create(Application);
  Spict.InitialDir:='我的文档';
  Spict.Filter:='JPG图像文件(*.JPG)|*.JPG';
  if Not Spict.Execute then exit;
  pjpg:=tjpegimage.Create;
  pjpg.LoadFromFile(Spict.FileName);
  Image1.Picture.Assign(Pjpg);
  pic:=TMemoryStream.Create;
  pjpg.SaveToStream(pic);
  pic.Position:=0;
  TBlobField(CustomerQry.FieldByName('UserIDImg')).LoadFromStream(pic);
  Image1.Picture.CleanupInstance;
  Spict.Free;
  Pjpg.Free;
  pic.Free;
end;
procedure Tviewdataform.FormShow(Sender: TObject);  //读图象
var tempjpeg:tjpegimage;
    TempStream:TMemoryStream;
begin
image1.Picture.Graphic :=nil;
    try
      tempstream := TMemoryStream.Create;
      tempjpeg:=tjpegimage.Create;
      TBlobField(querydataform.UDataQry.FieldByName ('UserIDImg')).LoadFromStream(tempstream); //执行到这里出错
      tempstream.Position:=0;
      tempjpeg.loadfromstream(tempstream);
      Image1.Picture.Assign(TempJpeg);
    finally
      tempstream.free;
      tempjpeg.free;
    end; 
end;

解决方案 »

  1.   

    var
      Field: TField;
      strm: TStream;
    begin
      Field := Column.Field;
      if Field is TBlobField then
      begin
        if (Field is TGraphicField) or (Field is TMemoField) then Exit
      end
      else
        Exit;
      strm := Field.DataSet.CreateBlobStream(Field, bmRead);
      try
        JPEGImage.LoadFromStream(strm);
        FileName := Field.DataSet.FieldByName('FileName').AsString;
      finally
        strm.Free;
      end;
    end;(注:给你一个例子供参考)
      

  2.   

    (CustomerQry.FieldByName('UserIDImg') as TBlobField).LoadFromStream(pic);
      

  3.   

    var
    BS:TADOBlobStream;BS:=TADOBlobStream.Create(CustomerQry.FieldByName('UserIDImg') as TBlobField, bmRead);
    BS.LoadFromStream(pic);
      

  4.   

    请问,你是否把数据集也通过参数传到DLL文件中去了。具我所知,好像在DLL中不能传输数据集。我有主程序中用:
    TBlobField(querydataform.UDataQry.FieldByName ('UserIDImg')).LoadFromfile(filename); //就可以呀。
    你在DLL中独立设一个数据集试试。
      

  5.   

    TBlobField(querydataform.UDataQry.FieldByName ('UserIDImg')).LoadFromStream(tempstream); //执行到这里出错读图片的话这里应该是saveFromStream啊!从数据库里拿出来1