转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
在Delphi中动态生成QuickReport报表         ★★★★

在Delphi中动态生成QuickReport报表

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2078 更新时间:2009/4/23 18:38:21

----笔者在前一段使用Delphi开发数据库的工作中,用户提出了这样一个需求:要根据自己的的查询结果动态生成报表然后进行打印。几经摸索,笔者使用动态生成QuickReport控件的方法满足了用户的需求。现将此方法说明如下,希望能为有类似工作要做的朋友们提供一点有益的提示。

 

一、基本思路

----先将查询的一些参数(如SQL命令,字段名称,字段宽度等)按照一定格式写入一个临时文件中。在生成报表时,根据临时文件中所记录的参数动态生成各种QuickReport控件即可。

 

二、程序实现

2.1临时文件格式

----临时文件的格式可以根据需要自定义,笔者采用了INI的文件格式。Delphi提供了一个TInifile类,使得在Delphi中操作INI格式文件,非常方便。关于INI文件的格式和具体操作相关的文章有不少,我这里不再赘述。临时文件格式如下:

Report.ini 

:报表细节

[rep_detail]

Title=XXXXX表

:打印纸设置,1为A4纸,2为B5纸,3为16K

Page=1

:打印方式,1为横打,0为竖打

Orientation=1

:报表包含的字段数目

columns=8

 

:TQurey组件信息

[QureyData]

:QuickReport组件中Tqurey组件的SQL命令的内容

Sql_command=select V_XM,V_JGZW,V_BMMC,V_DWMC,V_DWZW,V_ZY,V_ZC,V_BGDH from Hvzzjg where V_XM  LIKE ''''李%''''

 

[col_0]

Caption=姓  名

DataFiled=V_XM

Width=60

……

……

 

2.2动态生成QuickReport报表

--- 报表的主要控件及其主要属性设置如下

控件名称

类名

属性

属性值

Form_rep

TForm

caption

动态报表

QuickRep

TQuickRep

DataSet

REP_QUERY

DetailBand1

TQRBand

BandType

rbDetail

ColumnHeaderBand1

TQRBand

BandType

rbColumnHeader

REP_DataSource

TDataSource

DataSet

Rep_Query

Rep_Query

TQuery

DatabaseName

REPDATABASE

Rep_Database

 

TDatabase

 

Connected

True

Params.Strings

''''SERVER NAME=XXX

''''USER MAME=XXX''''

''''PASSWORD=XXX''''

DatabaseName

REPDATABASE

上表所示控件是在程序中手工创建的。其他的控件则要在程序中动态创建。

2.2.2主要程序

unit f_rep;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, QuickRpt, QRCtrls, DB, DBTables,PRINTERS,QRPrntr,inifiles,

  TeeProcs, TeEngine, DbChart, QRTEE;

 

type

  TForm_rep = class(TForm)

    QuickRep: TQuickRep;

    DetailBand1: TQRBand;

    ColumnHeaderBand1: TQRBand;

    REP_DataSource: TDataSource;

    REP_QUERY: TQuery;

    rep_Database: TDatabase;

    procedure TForm_rep.QuickRepAfterPreview(Sender: TObject);//浏览完毕,释放所有创建的组件

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var  Form_rep:TForm_Rep;

    type //报表的摘要信息

       C_rep_Summary=record

         Title:string;//报表的标题

         Page:TQRPaperSize;//报表的页面设置,采用何种型号的纸

         Orientation:TPrinterOrientation;//报表的页面设置,是横打还是竖打

         Columns:integer;//报表包含的列数

     end;

 

     type

        C_Rep_Col_Summary=record//报表列的摘要信息

           Caption:string;//报表的列名

           DataFiled:string;//报表的列所对应的数据库中的字段名

           Width:integer;//报表的列宽

     end;

 

     type

        C_Rep_Col_Sum_store=record //存储报表列的摘要信息

         Caption_array:array of string;

         DataFiled_array:array of string;

         Width_array:array of integer;

     end;

var 

     rep_Summary:C_rep_Summary;

     Rep_Col_Summary:C_Rep_Col_Summary;

     Rep_Col_Sum_store:C_Rep_Col_Sum_store;

     Colum_Name:array of tQRRichText;

     Colum_Data:array of TQRDBRichText;

     C_Query:TQuery;

    

 

procedure  Form_rep_init();

procedure DynCreat_TQRDBText(Colum_Num:integer;Colum_Height:integer;DataSet_Name:TQuery);//动态创建TQRDBText控件

procedure  DynCreat_TQRRichtext(Colum_Num:integer);//动态创建TQRRichtext控件

procedure  DynCreat_TQuery(Inifile_Name:Tinifile);//动态创建TQuery控件的SQL语句

procedure  Get_PageCount();//取得打印总页数

function   Open_IniFile():Tinifile;//打开临时文件

procedure  Read_Col_Summary(Inifile_Name:Tinifile);//读取报表列的摘要信息

procedure  Read_Rep_Summary(Inifile_Name:Tinifile);//读取报表的摘要信息

function   rep_chanslateOrientation(var Rep_Orientation:integer):TPrinterOrientation;//将打印方式设置进行转换

function rep_chanslatepage(var Rep_Page:integer):TQRPaperSize;//将打印页尺寸设置进行转换

 

implementation

 

{$R *.dfm}

 

function rep_chanslatepage(var Rep_Page:integer):TQRPaperSize;//将打印页类型设置进行转换

begin

    case  Rep_Page of

1:begin

           result:=A4;

           Form_rep.QuickRep.PrinterSettings.PaperSize:=A4;

         end;

       2:begin

           result:=B5;

           Form_rep.QuickRep.PrinterSettings.PaperSize:=B5

         end;

       3:begin

           result:=Executive;

           Form_rep.QuickRep.PrinterSettings.PaperSize:=Executive;

         end;

    end;

end;

 

function rep_chanslateOrientation(var Rep_Orientation:integer):TPrinterOrientation;//将打印方式设置进行转换

begin

    case  Rep_Orientation of

       0:begi

[1] [2] [3]  下一页


[Delphi程序]QUICKREPORT SAVE AS  [Web开发]在asp.net中动态生成web控件
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台