小新技术网WWW.XKER.ORG 学无止境,我们永远在路上。在路上,是生命的远行,是为温暖身边人!
操作系统 - 编程开发 - 聊天软件 - 网络 - 站长之家 - 工具软件 - 办公 - 图像动画 - 安全 - 网页设计 - 硬件 - 服务器 - 存储 - 手机 - 资讯 - 下载
您现在所在的位置:小新技术网 > 编程开发 > 浏览内容:在Delphi中实现数据分析模块的动态报表

在Delphi中实现数据分析模块的动态报表

小新技术网 XKER.ORG 2008-11-21 来源/作者: 收藏本页
 一、问题的提出

  ---- Delphi作为强大的数据库开发工具,正被愈来愈多的编程人员所采用,"聪明的程序员用Delphi"更形象生动的道出广大程序员的心声,但这并不意味着所有功能的实现都非常容易,例如,笔者在开发军队的某个信息系统中,就在为数据分析模块中DecisionGrid1控件的数据进行报表输出时走了不少的弯路。广大的Delphi的爱好者在今后的学习或工作中也有可能会遇到类似的问题,而在许多参考书中,很少有甚至没有关于它们的解决方法,于是,我想花费一点时间把它整理出来,以供大家参考。本文中报表动态生成的公用模块具有很大的灵活性和易操作性,其中的思路、实现的功能和通用性等方面的优缺点就由大家看了本文后自有定论。

  二、建立报表的动态输出公用模块

  ---- 下面,结合公司人事管理信息系统说明其实现的方法和技术。

  ---- 1、基本思路:首先从DecisionGrid1中获得报表所需数据,放到二维数组PA中,然后在C:DataWork中动态创建一个数据表tjb.dbf,存放报表数据,最后用T able1与tjb.dbf相连接,以后工作就与一般的动态输出报表(如查询报表)相类似,在这里我就无须赘述了。

  ---- 2、建立窗体文件:放入六个用于数据分析的常用控件DecisionQuery1、DecisionSource1、DecisionCube1、DecisionGraph1、DecisionPivot1、DecisionGrid1,设置DecisionSource1的decisionCube属性为decisionCube1,decisionCube1的Dataset属性为decisionQuery1、decisionQuery1的DatabaseName属性为c:datawork;一个Table1控件,用于连接数据表tjb.dbf;一个QuickRep1控件,用于数据的报表输出;两个Button1和Button2控件,其Caption分别设为"报表输出"和"返回"。分别设置decisionCube1的Dataset属性为decisionQuery1、decisionQuery1的DatabaseName属性为c:datawork.。

 ---- 3、单元文件的主要控件代码 Button1控件的代码如下(定义变量部分略),主要分以下8个功能块来加以说明:

  ---- ⑴删除同名或上一次建立的数据表

if FileExists('c:DataWorktjb.dbf') then
deletefile('c: DataWork tjb.dbf');

  ---- ⑵根据DecisionGrid1控件的cells属性,获得报表所需数据,并将其默认的'Sum'值汉化成'总计'、'合计'、'小计'以符合汉语的习惯要求,所求得的数据存放于二维数组PA中

for i:=1-DecisionGrid1.FixedCols to DecisionGrid1.
ColCount-DecisionGrid1.FixedCols-1 do
for j:=0-DecisionGrid1.FixedRows to DecisionGrid1.
RowCount-DecisionGrid1.FixedRows-1 do
begin
pa[i,j]:=DecisionGrid1.cells[i,j];
//处理DecisionGrid1控件中固定列的值为'Sum'的数据项
if ((i=1-DecisionGrid1.fixedcols) and (pa[i,j]='Sum')) then
pa[i,j]:='总 计'
else if ((i = -1) and (pa[i,j]='Sum')) then
pa[i,j]:='小 计'
else if ((i<-1) and (i>1-DecisionGrid1
.FixedCols) and (pa[i,j]='Sum')) then
pa[i,j]:='合 计';
//处理DecisionGrid1控件中固定行的值为'Sum'的数据项
if (pa[i,j]='Sum' ) and (j=-1) then
pa[i,j]:='总 计';
end;

  ---- ⑶用T able1动态创建数据表tjb.dbf

Table1.Active:=false;
with Table1 do
begin
DatabaseName := 'c:DataWork';
TableName := 'tjb';
TableType := ttDBase;
with FieldDefs do
begin
Clear;
for i:=1 to 40 do
Add(IntToStr(i),ftString,30, False);
end;
CreateTable;
end;
//下面将DecisionGrid1控件中的数据放入数据表中
Table1.Active:=true;
for j:=1-DecisionGrid1.FixedRows to DecisionGrid1
.RowCount-DecisionGrid1.FixedRows-1 do
begin
K:=0;
Table1.Insert;
for i:=1-DecisionGrid1.FixedCols to DecisionGrid1
.ColCount-DecisionGrid1.FixedCols-1 do
begin
Table1.Fields[K].AsString:=pa[i,j];
K:=K 1;
end;
Table1.Post;
Table1.Next;
end;

共2页: 上一页 [1] [2] 下一页
【重要声明】:小新技术网刊载此文仅为提供更多信息目的,并不代表小新技术网同意文章的说法或描述,也不构成任何建议,对本文有任何异议,请在下面提出建议。
发表意见(提示:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。)
  • 排行
  • 推荐
  • 最新