1.在fastreport中如何判断当某一数据为正数,则在报表中其前面加一个‘+’,当某一数据为负数,则在报表中其前面加一个‘-’,具体的操作如何?要怎么写语句? 
2.我用DBImage1来直接连接一个image字段,为什么在保存很小的图片(几k)就可以,一旦保存大图片,根本无法保存。想知道这是为什么?大家在把图片保存在数据库中又是如何进行的啊!
谢谢!

解决方案 »

  1.   

    1。很容易,你的数据都是放在MEMO里面吧。在MEMO里面不是有BEGIN和END的输入框?在那里面写代码就可以了。参考一下FR的函数库
      

  2.   

    第二个问题 用流保存图片~~
    设置Picture1的blobtype
    设置Picture1的datafield
      

  3.   

    以下是我操作图片读存删 过程给你参考function  img_post_gkxb(img_z_E_Z:TcxImage;strLei:string;intLeiMing:integer):Boolean;//保存图片
    var
    msmem:TmemoryStream;
    jpg:TJpegImage;
    D_C_esql:TClientDataSet;
    s:string;
     begin
     with D_C_esql do
     begin
     D_C_esql:=TClientDataSet.Create(nil);
     D_C_esql.RemoteServer:=CDM.SockC;
     D_C_esql.ProviderName:='DSPEsqldu';        s:='select * from Dimg where  类名 = '+inttostr(intLeiMing)+' and ID = '''+(strLei)+'''';
            Close;
            CommandText:=s;
            Open;
            if RecordCount>0 then
             Edit else
             begin
               Append;
               FieldByName('ID').AsString:=strLei;
               FieldByName('类名').AsInteger:=intLeiMing;
               end;            if img_z_E_Z.Picture.Graphic <> nil then
                    begin
                msmem:=TmemoryStream.Create;
                Jpg:=TjpegImage.Create;
                jpg.Assign(img_z_E_Z.Picture.Graphic);
                jpg.SaveToStream(msmem) ;            // 1
    //  form2.Image1.Picture.Bitmap.SaveToStream(msmem);        // 保存bmp图像的方法
                msmem.Position :=0;
                TBlobField(FieldByName('图片文件')).LoadFromStream(msmem);
                Msmem.Free ;
                jpg.Free;
                end
                else FieldByName('图片文件').AsString:='';
                Post;
                FUPDATE(d_C_esql);
        Free;
     end;
     end;
    //======================================
    function  img_gkxb(strLei:string;intLeiMing:integer):TJpegImage;  //读取图片
    var s:string; D_C_esql:TClientDataSet;
    ms:TStringStream;
    begin
    with D_C_esql do
     begin
     D_C_esql:=TClientDataSet.Create(nil);
     D_C_esql.RemoteServer:=CDM.SockC;
     D_C_esql.ProviderName:='DSPEsqldu';
     s:='select * from Dimg  where  类名 = '+inttostr(intLeiMing)+' and ID = '''+strLei+''''; d_C_esql.Close;
     d_C_esql.CommandText:=s;
     d_C_esql.Open;
     if d_C_esql.FieldByName('图片文件').AsString<>'' then
     begin
       ms:=TstringStream.Create('');
       img_gkxb:=TJpegImage.Create;
       TBlobField(d_C_esql.FieldByName('图片文件')).SaveToStream(ms);
       img_gkxb.LoadFromStream(ms);
       ms.Position :=0;
        img_gkxb.LoadFromStream(ms);
    //  Form2.Image1.Picture.Bitmap.LoadFromStream(ms);    //调用bmp图像的方法
        end else  img_gkxb:=nil;
        Free;
      end;
    end;
    //=======================
    procedure  PDelimg(strLei:string;intLeiMing:integer);//删除图片
      var D_C_esql:TClientDataSet;
      begin
     with D_C_esql do
     begin
     D_C_esql:=TClientDataSet.Create(nil);
     D_C_esql.RemoteServer:=CDM.SockC;
     D_C_esql.ProviderName:='DSPEsqldu';  Close;
      CommandText:=' delete from  Dimg where  类名 = '+inttostr(intLeiMing)+' and ID = '''+strLei+'''';
      Execute;
      Free;
      end;
     end;
      

  4.   

    surdon(ャ野马ャ) :
    能说具体一点吗?是在DELPHI中的DATASET中字段设置Picture1的blobtype为那一个值?怎么找不到设置Picture1的datafield属性!
      

  5.   

    你用的是什么版本啊
    我用的是 
    Picture1->blobtype> btJPG
    FastReport.v2.52.FireRose中文版  在Picture1->blobtype 下面二个就是datafield属性
      

  6.   

    我说的是 FastReport Picture1图片打印控件 里面的~~
      

  7.   

    我問的是這個問題"我用DBImage1来直接连接一个image字段,为什么在保存很小的图片(几k)就可以,一旦保存大图片,根本无法保存。想知道这是为什么?大家在把图片保存在数据库中又是如何进行的啊!"難道不是DBImage1控件而是用 FastReport Picture1图片打印控件?這樣能行?我主要是想把圖片通過感知控件DBImage1來從數據庫中讀取和存入!DBImage1是與相應的dataset的datasource相連啊!
      

  8.   

    就是用流保存 用Image1  不用DBImage1
      

  9.   

    Image1無法直接連dataset!有更好的辦法?