简单的报表问题(在线等) 我在报表中设计器中增加一个时间范围,当然时间是TDateTimePicker类型的,我已经在程序中声明。 报表部分形式如下: 日报表 时间范围:[d1]至[d2] 其中d1,d2均以声明是TDateTimePicker类型的,但当我打印报表时,系统提示‘d1’没有定义,请问这是?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好的啊,代码如下: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);beginif ADOQuery1.State<>dsBrowse then begin showmessage('没有数据处理!'); exit; end; PrintOrPreview(f,'F_other\ForPrint\frfwinereport.frf',frReport1); //wineprint;end;end.这是其中的部分代码,但已经够分析用了 其中SQL语句被我简化了,其实那个SQL语句很复杂的 CSDN上的朋友帮忙呵,我真的很需要这个功能的呵! 请贴出PrintOrPreview过程中写是什么事件? frReport1.LoadFromFile('F_other\ForPrint\frfwinereport.frf'); frReport1.FindObject('时间段').Memo.Text := '时间范围:' + FormatDateTime('yyyy.mm.dd', D1.Date) + '--' + FormatDateTime('yyyy.mm.dd', D1.Date);不过还是不太明白你的意思,到底是哪里出错! 那你用我上面的方法应该可以:首先在你的报表中设置[时间段],然后在打印的事件中写:frReport1.LoadFromFile('F_other\ForPrint\frfwinereport.frf'); frReport1.FindObject('时间段').Memo.Text := '时间范围:' + FormatDateTime('yyyy.mm.dd', D1.Date) + '--' + FormatDateTime('yyyy.mm.dd', D1.Date);这样的方法一定可以实现! 就是在报表头中设置一个:即增加一个:MEMO1:TfrMemoView 在报表中增加一个:MEMO1:TfrMemoView :其属性name 为 '时间段' 以下是我的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('文件打印异常!'); endend; 如何设置delphi全屏显示时候,热键弹出窗口不出现 三层结构的安全问题 用DBgrid,修改联合查询得结果,出错,请高手指导一下 delphi6的NMHTTP或delphi7的IDHTTP保存网页的问题? ▲▲▲谁能帮我调下面的代码,各个按钮的功能?▲▲▲ 求助:向各位大哥请教一个串口问题,(mscomm)很急很急,多谢了! 各位大神,我想做一个类似任务栏一样的窗体谁有好的解决方法啊 delphi 如何获取sql查询统计的出来的值? 刚学,有个概念上的问题。请教! 怎样选table的一行 请各位兄弟进来看看,给出个主意,小弟先谢过了 求adoquery删除语句,菜鸟问题,在线等!!!!!!
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.这是其中的部分代码,但已经够分析用了
frReport1.FindObject('时间段').Memo.Text := '时间范围:' + FormatDateTime('yyyy.mm.dd', D1.Date) +
'--' + FormatDateTime('yyyy.mm.dd', D1.Date);不过还是不太明白你的意思,到底是哪里出错!
首先在你的报表中设置[时间段],
然后在打印的事件中写:
frReport1.LoadFromFile('F_other\ForPrint\frfwinereport.frf');
frReport1.FindObject('时间段').Memo.Text := '时间范围:' + FormatDateTime('yyyy.mm.dd', D1.Date) +
'--' + FormatDateTime('yyyy.mm.dd', D1.Date);
这样的方法一定可以实现!
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;