当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 我发现搞编程的连洗衣服的时间都没有,更不要说去pao mm 了, 而网络管理员一般轻松的多(据说工作时间还可能有时间聊天!嘘...),而且据说相比其他的计算机职位有更大可能的提升的机会。。。 聪明的你,选择哪个? 愚蠢的我,何去何从? ......
    摘要: 如题,参与讨论者有分,可以不断加分。 ......


请大家爱关注一下的问题有关报表连接查询

把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上自己便不能正常显示  
   
   
   
   
 

NO.1   作者: WuHeHai

我觉得你的思路有点混乱。  
  在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中找到如何良好风格代码的文章  
 

NO.2   作者: crystal_bobo

或者试试把  
  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;  
   
 


    摘要: 用windows下bcb编的程序能移植到linux上吗? ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE