把ADOQuery放在Hege页上
用了一个Button1来根据Radiobutton的选定来决定Hege上的这个ADOQuery执行什么查询语句,
然后用了一个Button2来创建预览Report
========================================================================
程序如下:
unit Hegebiaozhun;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, Db, ADODB;
type
THege = class(TForm)
PageControl1: TPageControl;
Hegenan: TTabSheet;
Hegenv: TTabSheet;
RadioGroup1: TRadioGroup;
ADOConnectionHG: TADOConnection;
ADOQueryHG1: TADOQuery;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Hege: THege;
Hegenan:TTabSheet;
RadioGroup1:TRadioGroup;
implementation
{$R *.DFM}
uses
ReportHege;
procedure THege.FormCreate(Sender: TObject);
begin
RadioGroup1.ItemIndex:=0;
end;
procedure THege.Button1Click(Sender: TObject);
begin
adoqueryHG1.close;
adoqueryHG1.sql.clear;
if RadioGroup1.ItemIndex=0 then
adoqueryHG1.sql.add(select * from 大一男生体育合格标准表);
if RadioGroup1.ItemIndex=1 then
adoqueryHG1.sql.add(select * from 大二男生体育合格标准表);
if RadioGroup1.ItemIndex=2 then
adoqueryHG1.sql.add(select * from 大三男生体育合格标准表);
if RadioGroup1.ItemIndex=3 then
adoqueryHG1.sql.add(select * from 大四男生体育合格标准表);
adoqueryHG1.open;
end;
procedure THege.Button2Click(Sender: TObject);
var HegeReportnan:THegeReportnan;
begin
HegeReportnan:=THegeReportnan.create(self);
HegeReportnan.QuickRepHGnan.Preview;
HegeReportnan.free;
end;
end.
-------------------------------------------------------
unit ReportHege;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, Qrctrls, ExtCtrls;
type
THegeReportnan = class(TForm)
QuickRepHGnan: TQuickRep;
DetailBand1: TQRBand;
QRDBTextHGnan1: TQRDBText;
QRDBTextHGnan2: TQRDBText;
TitleBand1: TQRBand;
QRSubDetail1: TQRSubDetail;
QRLabel1: TQRLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
HegeReportnan: THegeReportnan;
implementation
{$R *.DFM}
uses
Hegebiaozhun;
procedure THegeReportnan.FormCreate(Sender: TObject);
var Hege:THege;
begin
Hege:=THege.Create(application);
if Hege.RadioGroup1.ItemIndex=0
then QRLabel1.caption:=一年级 ;
QuickRepHGnan.Dataset:=Hege.adoQueryHG1;
QRDBTextHGnan1.Dataset:=Hege.adoQueryHG1;
QRDBTextHGnan1.Datafield:=学号;
QRDBTextHGnan2.Dataset:=Hege.adoQueryHG1;
QRDBTextHGnan2.Datafield:=总得分;
end;
end.
==========================================================================
但是这个语句
Hege:=THege.Create(application);
if Hege.RadioGroup1.ItemIndex=0
then QRLabel1.caption:=一年级 ;
影响了
QuickRepHGnan.Dataset:=Hege.adoQueryHG1;
QRDBTextHGnan1.Dataset:=Hege.adoQueryHG1;
QRDBTextHGnan1.Datafield:=学号;
QRDBTextHGnan2.Dataset:=Hege.adoQueryHG1;
QRDBTextHGnan2.Datafield:=总得分;
的实现,使得只能显示一年级,却不能显示学号总得分的内容
如果
Hege:=THege.Create(application);
if Hege.RadioGroup1.ItemIndex=0
then QRLabel1.caption:=一年级 ;
放在什么Onshow上自己便不能正常显示
我觉得你的思路有点混乱。
在Hege窗体的Button2事件中,创建实例HegeReportnan。而在THegeReportnan的Create事件中又重新创建THege的实例,而且这个实例是局部变量,跟全局的Hege同名了,
我觉得你这样处理好一点。
1.在Hege窗体的Button2事件中,创建了THegeReportnan实例后,不要急于Preview,你可以在Preview之前作一些准备工作,比如你需要把Hege实例传过去。
2.于是你可以在THegeReportnan添加一个方法SetHege。代码大致如下:
procedure THegeReportnan.SetHege(AfrmHege: THege);
begin
if not Assigned(AfrmHege) then Exit;
//去除这些有创建THege的代码,因为Hege已经作为参数传进来了。
//Hege:=THege.Create(application);
if AfrmHege.RadioGroup1.ItemIndex = 0
then QRLabel1.caption :=一年级 ;
QuickRepHGnan.Dataset := AfrmHege.adoQueryHG1;
QRDBTextHGnan1.Dataset := AfrmHege.adoQueryHG1;
QRDBTextHGnan1.Datafield := 学号;
QRDBTextHGnan2.Dataset := AfrmHege.adoQueryHG1;
QRDBTextHGnan2.Datafield := 总得分;
end;
3.在Button2的代码可能就变成这样了:
procedure THege.Button2Click(Sender: TObject);
var
frmHegeReportnan:THegeReportnan;
begin
frmHegeReportnan := THegeReportnan.create(nil);
try
//把自己传给HegeReportnan,设置一些DataSet和其他准备内容
frmHegeReportnan.SetHege(Self);
frmHegeReportnan.QuickRepHGnan.Preview;
finally
frmHegeReportnan.free;
end;
end;
3.不好意思,我罗嗦一下,你要注意一下代码的规范化。可以在CSDN中找到如何良好风格代码的文章
或者试试把
var Hege:THege;
begin
Hege:=THege.Create(application);
if Hege.RadioGroup1.ItemIndex=0
then QRLabel1.caption:=一年级 ;
end;
放在Button2
procedure THege.Button2Click(Sender: TObject);
var HegeReportnan:THegeReportnan;
begin
HegeReportnan:=THegeReportnan.create(self);
Hege:=THege.Create(application);
if RadioGroup1.ItemIndex=0
then HegeReportnan.QRLabel1.caption:=一年级 ;
HegeReportnan.QuickRepHGnan.Preview;
HegeReportnan.free;
end;