我在报表中设计器中增加一个时间范围,当然时间是TDateTimePicker类型的,我已经在程序中声明。
  报表部分形式如下:
                          日报表
   时间范围:[d1]至[d2] 
  其中d1,d2均以声明是TDateTimePicker类型的,但当我打印报表时,系统提示‘d1’没有定义,请问这是??

解决方案 »

  1.   

    好的啊,代码如下:
    unit unit_winereport;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DBCtrls, Buttons, StdCtrls, ComCtrls, ExtCtrls, Grids, DBGrids,
      ToolWin, DB, ADODB, FR_DSet, FR_DBSet, FR_Class;type
      Tfrm_winereport = class(TForm)
        Panel1: TPanel;
        ADOQuery1: TADOQuery;
        ADOQuery2: TADOQuery;
        DataSource1: TDataSource;
        DataSource2: TDataSource;
        SaveDialog1: TSaveDialog;
        frDBDataSet1: TfrDBDataSet;
        frReport1: TfrReport;
        Panel2: TPanel;
        DBGrid1: TDBGrid;
        CoolBar1: TCoolBar;
        ToolBar1: TToolBar;
        GroupBox1: TGroupBox;
        Label1: TLabel;
        DateTimePicker1: TDateTimePicker;
        DateTimePicker2: TDateTimePicker;
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        DBNavigator1: TDBNavigator;
        SpeedButton6: TSpeedButton;
        SpeedButton5: TSpeedButton;
        SpeedButton4: TSpeedButton;
        SpeedButton3: TSpeedButton;
          procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormShow(Sender: TObject);
        
        procedure frReport1GetValue(const ParName: String; var ParValue: Variant);
        procedure SpeedButton5Click(Sender: TObject);
        procedure SpeedButton3Click(Sender: TObject);
        procedure SpeedButton2Click(Sender: TObject);
      private
        procedure fordbgrid;
        procedure fordbgrid_detail(DBGrid1:TDbgrid;i,Fwidth:integer);
        { Private declarations }
      public
        { Public declarations }
      end;var
      frm_winereport: Tfrm_winereport;implementation
       uses
      lib_public,unitdm, unit_dayReportDetail;
    {$R *.dfm}procedure Tfrm_winereport.fordbgrid_detail(DBGrid1:TDbgrid;i,Fwidth:integer);
    begin
         DBGrid1.columns[i].Title.alignment:=tacenter;
         DBGrid1.columns[i].width:=Fwidth;
         DBGrid1.columns[i].Font.Color:=clBlack;
         DBGrid1.columns[i].Title.Color:=clTeal;
         DBGrid1.columns[i].Title.Font.Color:=clYellow;
    end;procedure Tfrm_winereport.fordbgrid;
    begin
          fordbgrid_detail(DBGrid1,0,80);
          fordbgrid_detail(DBGrid1,1,80);
          fordbgrid_detail(DBGrid1,2,80);
          fordbgrid_detail(DBGrid1,3,80);
          fordbgrid_detail(DBGrid1,4,80);
          fordbgrid_detail(DBGrid1,5,80);
          fordbgrid_detail(DBGrid1,6,80);
          fordbgrid_detail(DBGrid1,7,100);
          //DBGrid1.columns[8].Visible:=false;
    end;
    procedure Tfrm_winereport.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
       action:=cafree;
    end;procedure Tfrm_winereport.FormShow(Sender: TObject);
    begin
           DateTimePicker1.Date:=date;
           DateTimePicker2.date:=date;
    end;procedure Tfrm_winereport.frReport1GetValue(const ParName: String;
      var ParValue: Variant);
    begin
       if parname=' DateTimePicker1' then parvalue:=datetostr( DateTimePicker1.Date);
       if parname=' DateTimePicker2' then parvalue:=datetostr( DateTimePicker2.Date);
    end;
    procedure Tfrm_winereport.SpeedButton3Click(Sender: TObject);
    begin
       close;
    end;procedure Tfrm_winereport.SpeedButton2Click(Sender: TObject);
    var
       ss,s1,s2,s3,s4,s5,dd1,dd2:string; d:double;begin
        try
      ss:='';s1:='';s2:='';s3:='';s4:='';s5:='';
     try
     ///////////////////////////////
         if  DateTimePicker1.date> DateTimePicker2.date  then
           begin
               DateTimePicker1.date:= DateTimePicker2.Date;
           end;
           dd1:=quotedstr(datetostr( DateTimePicker1.Date));
           dd2:=quotedstr(datetostr( DateTimePicker2.Date));
     ///////////////////////////////
        ADOQuery1.DisableControls;                                      //在用union 连接有where的子句时,不能用参数,不然无法执行
        ADOQuery1.Close;
        ADOQuery1.sql.Clear;    ss:='select * from song'    ADOQuery1.SQL.Add(ss);
        if not ADOQuery1.Prepared then
           ADOQuery1.Prepared:=not ADOQuery1.Prepared;
        try
          ADOQuery1.Open;
        except
          ADOQuery1.ExecSQL;
        end;
     finally
         ADOQuery1.EnableControls;
     end;
     fordbgrid;
    except
      showmessage('执行有错!');
    end;
    end;procedure Tfrm_winereport.SpeedButton5Click(Sender: TObject);
    begin
    if ADOQuery1.State<>dsBrowse then  begin
          showmessage('没有数据处理!');
          exit;
       end;
      PrintOrPreview(f,'F_other\ForPrint\frfwinereport.frf',frReport1);
      //wineprint;
    end;end.这是其中的部分代码,但已经够分析用了
      

  2.   

    其中SQL语句被我简化了,其实那个SQL语句很复杂的
      

  3.   

    CSDN上的朋友帮忙呵,我真的很需要这个功能的呵!
      

  4.   

    请贴出PrintOrPreview过程中写是什么事件?   frReport1.LoadFromFile('F_other\ForPrint\frfwinereport.frf');
       frReport1.FindObject('时间段').Memo.Text := '时间范围:' + FormatDateTime('yyyy.mm.dd', D1.Date) +
         '--' + FormatDateTime('yyyy.mm.dd', D1.Date);不过还是不太明白你的意思,到底是哪里出错!
      

  5.   

    那你用我上面的方法应该可以:
    首先在你的报表中设置[时间段],
    然后在打印的事件中写:
    frReport1.LoadFromFile('F_other\ForPrint\frfwinereport.frf');
       frReport1.FindObject('时间段').Memo.Text := '时间范围:' + FormatDateTime('yyyy.mm.dd', D1.Date) +
         '--' + FormatDateTime('yyyy.mm.dd', D1.Date);
    这样的方法一定可以实现!
      

  6.   

    就是在报表头中设置一个:即增加一个:MEMO1:TfrMemoView
      

  7.   

    在报表中增加一个:MEMO1:TfrMemoView :其属性name 为 '时间段'
      

  8.   

    以下是我的PrintOrPreview原程序,你看有问题吗?
    procedure PrintOrPreview(TF:boolean;Path:string;fr1:TfrReport);                     
    var
      p:tfrpreviewform;
    begin
      try
        if tf then begin
           fr1.LoadFromFile(path);
           fr1.PrepareReport;
           fr1.ModalPreview:=false;
           p:=tfrpreviewform.create(application);
           p.WindowState:=wsMinimized;
           p.Caption:='单据打印!';
           p.Show_Modal(fr1);
           p.Conprint;
           p.Close;
        end
        else begin
          fr1.LoadFromFile(path);
          fr1.ShowReport;
         // fr1.LoadFromFile('F_other\ForPrint\frfwinereport.frf');
         // fr1.FindObject('时间段123').Memo.Text := '时间范围:' + FormatDateTime('yyyy.mm.dd', Date) +FormatDateTime('yyyy.mm.dd', Date);    end;
      except
         showmessage('文件打印异常!');
      end
    end;