图片存在数据库中,BMP和JPG格式都有,但是数据集中有些记录是空的,没有图图,打印时却显示了别人的照片,我写的代码如下:
procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent);
var MS1,MS2:TMemoryStream;
    i:integer;
    C:byte;
    ImageType,sFileName:String;
begin
  try
      MS1:=TMemoryStream.Create;
      MS2:=TMemoryStream.Create;
      TBlobField(self.Qry_Data.FieldByName('C1101')).SaveToStream(MS1);
      MS1.Position:=0;
      MS1.Seek(0,0);      if MS1.Size<=0 then exit;
      ImageType := '';
      for i := 0 to 3 do
      begin
        MS1.Read(C, 1);
        ImageType := ImageType + Char(C);
      end;      ImageType := Trim(ImageType);
      if pos('JJJ',ImageType)>0 then  ImageType:='JPG';      MS2.Clear;
      for I := 0 to MS1.Size - 3 do
         begin
            MS1.Read(C, 1);
            MS2.Write(C, 1);
         end;
      //将图片流保存到临时文件中
      MS2.Seek(0, 0);
      sFileName:=sFileName+'.'+ImageType;
      MS2.SaveToFile(sFileName);      if (Sender is TfrxPictureView) then
        (Sender as TfrxPictureView).Picture.LoadFromFile(sFileName);
 //这里总是会载入,
 
  finally
      if Assigned(MS1) then
         MS1.Free;
      if Assigned(MS2) then
         MS2.Free;
  end;
end;

解决方案 »

  1.   

    我用fastreport直接连接数据库显示图片的,不写代码的没问题
      

  2.   

    直接连数据库不写代码好像只能是BMP格式的图片吧,我设了image的field和dataSet没用
    我这样写也不会造成每张一样,只是如果没有图片的人会显示前一个人的照片。。郁闷啊
      

  3.   

    在预览时主数据是没有变的,我用 if Self.Qry_data.fieldbyName('image').isnull then这样判断是没用的,如果能判断 frxDBDataSet的字段值就可以解决这个问题了,但不知道如何写