以下代码是制作FASTREPORT动态报表的:
var
   Page: TfrPage;BandMD: TfrBandView;NUM,PRICE: TfrView;
   
procedure TfrmFRPrint.FormCreate(Sender: TObject);
begin  query1.Close;
  query1.ConnectionString:=strConn;
  query1.Prepared;
  query1.SQL.Clear;
  query1.SQL.Add('select * from pomx where pono='+''''+frmCashAcc.edit5.Text+'''');
  query1.Open;
  frDataSet1.DataSet:=Query1;
  
  fr.Pages.Clear;
  fr.Pages.Add;              
  Page := fr.Pages[0];  BandMD:= TfrBandView(frCreateObject(gtBand, ''));  // create MasterData band
  BandMD.SetBounds(0, 424, 758, 24);
  BandMD.BandType := btMasterData;
  BandMD.Dataset := 'frDataSet1';
  BandMD.Prop['Stretched']:=True;
  Page.Objects.Add(BandMD);  Num:= frCreateObject(gtMemo, '');
  Num.SetBounds(416, 428, 103, 18);
  Num.Memo.Add('[query2."num"]');
  Num.Prop['Alignment']:=10;
  Num.Format := 1 * $01000000 + 4 * $00010000 +
        3 * $00000100+ord('.');
  Num.FormatStr:='0.000';
  Page.Objects.Add(Num);  Price:= frCreateObject(gtMemo, '');
  Price.SetBounds(602, 329, 107, 18);
  Price.Memo.Add('[query1."Price"]');
  Price.Format := 1 * $01000000 + 4 * $00010000 +
        4 * $00000100+ord('.');
  Price.FormatStr:='0.0000';
  Page.Objects.Add(Price);  fr.ShowReport;
end;上面的NUM是字段NUM(数量)的MEMO,Price是字段Price(单价)的MEMO,,但
当一列数值中,如下:       未用Format前            用了Format后       现在想设为
     数量        单价         数量    单价       数量     单价
3.5780000686  2.375999927    3.578   2.3760     3.578    2.3760
     75           10        75.000  10.0000      75     10.00
    
即是:当数量遇到小数时,取三位小数,遇到整数时取整数;
     当单价遇到小数时,取四位小数,遇到整数时取两位小数;
不知如何解决?

解决方案 »

  1.   

    如果使用Format的话,这种情况是很难实现的,只能使用另外的方法
      

  2.   

    试试:
    Price:= frCreateObject(gtMemo, '');
      Price.SetBounds(602, 329, 107, 18);
      Price.Memo.Add('[FormatFloat([str],[query1."Price"])]');
      Price.Script.Add('
    //这个语句你需要注意单引号,自己弄好
      if Frac([明细数据."Price"])>0 then 
        str:='#,####0.0000'
      else
        str:='#,##0.00'
    ')
      Page.Objects.Add(Price);以上方法应该可行,我试过的
    多给我点分。
    ^_^
      

  3.   

    不行啊!
      Price:= frCreateObject(gtMemo, '');
      Price.SetBounds(602, 329, 107, 18);
      Price.Memo.Add('[FormatFloat([str],[query1."Price"])]');
      Price.Script.Add('
    //这个语句你需要注意单引号,自己弄好
      if Frac([明细数据."Price"])>0 then 
        str:='#,####0.0000'
      else
        str:='#,##0.00'
    ')
      Page.Objects.Add(Price);脚本那行:Price.Script.Add('   错误提示为:Unterminated String;
    这行:if Frac([明细数据."Price"])>0 then 错误提示为:Missing operator or semicolon;
                                        Illegal character in input file:''细''[$CFB8].
      

  4.   

    Price.Script.Add('if Frac([Query1."Price"])>0 then str:=''#,####0.0000'' else str:=''#,##0.00''')
      

  5.   

    哎呀!成功了!真是太感谢你了!请问你用DELPHI几年了?小弟还有一个问题:
    在DBGRID中,字段是MEMO(备注)型的,在新增或修改记录时如何在DBGRID中输入文本内容?
      

  6.   

    将近4年
    一般在Dbgrid中不会直接编辑Memo型的字段,可以在另外的控件中编辑。
    如果确实需要在DBGrid中编辑,就不要选择Memo型。可以选用文本类型的。