学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> Delphi >> Delphi数据库开发及统计表格设计


Delphi数据库开发及统计表格设计


p>  Delphi是Borland公司开发的基于PASCAL语言的Windows平台应用程序开发工具,它将可视化编程(Visual Programming)与面向对象(Object-Oriented)的卓越优点结合在PASCAL语言开发平台上,而且同时可以支持Client/Server模式的SQL数据库访问与ODBC(开发数据库互连),是一个真正面向对象的开发工具。

  Delphi最吸引人的特点是它的强大的数据库访问能力,它主要通过使用数据库引擎(Borland Database Engine,简称BDE)来访问本地数据库和远程数据库。但对于用户而言,不必直接编程访问BDE,而只需通过采用窗体(FORM)和大量方便且实用的数据库访问元件(Component)来实现,通过ReportSmith报表生成器可以生成多种随心所欲的报表。

  但是,用ReportSmith制作的各类报表,只便于输出至打印机上打印出来,若想把报表在屏幕上显示,则还需调用ReportView。而ReportView窗口界面对不太懂Delphi和Windows操作的普通用户来说,不直观,也不易操作。如何制作并在屏幕上显示出直观的二维统计报表,这是本文所要阐述的主要问题。

  以表格形式显示数据库内容一般地采用下面两种方式:
  ●纵向列表(如图1)
  ●交叉统计列表(如图2)


一、纵向列表
  Delphi可以用TDBGRID控件,以表格形式非常方便地显示单一或多数据库纵向列表。一般采用两种方法实现:
  (一)采用TTable与Tdatasource、TDbgrid控件
  在窗体中引入上述三个控件,并在Ttable中控件指出要访问的数据库存放路径及数据库名,在Tdatasource控件中指出数据源与Ttable相连,在TDbgrid控件中指出显示Tdatasource数据源内容,程序运行后,则显示出如图1所示的数据库纵向列表。
  该种方法一般用来显示单数据库表格或一对多两个数据库表格。

  (二)采用TQuery与Tdatasource、TDbgrid控件


  同样,在窗体中引入上述三个控件,并在TQuery控件中用SQL语句给出对有关数据库的查询,在Tdatasource控件中指出数据源与TQuery相连,在TDbgrid控件中指出显示查询的结果。程序运行后,则显示出如图1所示的数据库纵向列表。
  该种方法一般用于两个以上的多数据库查询。
  在TQuery控件中建立SQL查询有两种方法,一种是在程序设计阶段使用SQL查询,即为静态查询,第二种是在程序运行阶段使用SQL查询,即为动态查询。
  1. 静态查询 编写程序时,在窗体中放置Tquery元件,并设置对象名称,如Query1。使用Delphi对象检测器Object,双击Query 1对象的SQL属性,则激活SQL语句输入框,根据要求输入SELECT语句。当程序运行后,则显示出数据库纵向列表。静态查询比较简单,但实用性差。对于较复杂的查询,一般采用动态查询。
  2. 动态查询同样,在编写程序时,在窗体中放置TQUERY元件,并设置对象名称,如Query 1。在相关的事件函数中输入SQL语句,例如:

  WITH QUERY 1 DO
  BEGIN
  SQL.CLEAR;
  SQL.ADD(SELECTDW,COUNT(DW)FROM B_BASETJ F,B_INFO E);
  SQL.ADD(WHERE F.”SHBZCODE”=E.”SHBZCODE”GROUP BY DW);
  OPEN;
  END;

  当程序运行后,由某一事件激发,则显示出查询结果纵向列表。


二、交叉统计列表
  在Delphi环境下,无论用上述哪种方法制作数据库纵向列表,都是相对容易的。但要生成如图2所示二维统计报表,则并非易事。
  下面以笔者开发的《社会养老保险管理系统--统计管理》中的一段程序为例,详细说明图2所示交叉统计列表的制作。

  (一)调用数据库B_BASETJ.DB和B_INFO.DB
  上述两数据库的结构分别为:
  B_BASETJ.DB B_INFO.DB

字段名 字段类型 字段长度 字段名 字段类型 字段长度
dw a 4(单位代码) shbzcode a 21(社会保障号码)
shbzcode a 21(社会保障号码) attribution a 10(工作属性)
cadre_zw a 4(干部职务) sex a 2(性别)

  在B_INFO.DB数据库中存放着各人的基本情况,其中ATTRIBUTION字段包含固定工、农民合同工等工作属性;CADRE_ZW字段包含干部职务,若该字段内容为空,则表示为工人。

  (二)窗口界面设计及各组件属性说明
  用到的重要组件及其属性如下:
  QYERYTB1:TQUERY;{指明SQL的存取元件名为QUERYTB1}
  DataSourceTB1:Tdatasource;{指明与TQUERY相连的数据源为DatasourceTB1}
  Datasourcename=DataSourceTB1
  Dataset=QYERYTB1
  SG11:TstringGrid;{字符型二维数据表格}
  BTNEXIT:Tbutton;{取消按钮}

  (三)程序代码及其分析
  程序中主要通过使用TStringGrid和TQUERY控件来生成交叉统计列表。其中TStringGrid控件以二维网格形式显示字符型数据表格,CELL[I,K]为表格中的一个数据单元,K为行号,I为列号,K、I的起始值为0;TQUERY控件的作用是利用SQL语句统计出表格中某一列数据,如图2表格中共有6列,则需6次调用TQUERY。

  本程序还设置了公共程序段procedure COL(var I,k:INTEGER),这一子程序将被多次调用,用于填写表格中某一列数据。
  主要程序代码如下:
  unit T1;
  interface
  uses

SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,Forms,Dialogs,
StdCtrls,ExtCtrls,Grids,DB,DBTables, DBGrids,Report;

  type
  TT1FORM=class(TForm)
  BTNEXIT:TButton;
  SG11:TStringGrid;
  Labell:TLabel;
  QueryTB1:TQuery;
  DataSourceTB1:TDataSource;
  procedure FormCreate(Sender:TObject);
  procedure BTNEXIT Click(Sender:TObject);
  private
  PROCEDURE COL(VAR I,K:INTEGER);
  PROCEDURE CC(VAR I,K:INTEGER);
  {Private declarations}
  public
  {Public declarations}
  end;

  var
  T1FORM:TT1FORM;

  implementation
  {$R*.DFM}

  PROCEDURE tt1form.COL(VAR I,K:INTEGER);{用FOR...DO循环填写SG11表格中第I列的VAR J:INTEGER;值}
  BEGIN
  WITH SG11 DO
  BEGIN
  QUERYTB1.FIRST;
  FOR J:=2 TO K-1 DO
  BEGIN
  IF CELLS[0,J]=QUERYTB1.FIELDS[0].ASSTRING THEN{第0列填写单位代码}
BEGIN
  CELLS[I,J]:=QUERYTB1.FIELDS[1].ASSTRING;{填写第I列中某一行的值}
  QUERYTB1.NEXT;
  CELLS[I,1]:=INTTOSTR(STRTOINT(CELLS[I,1])+STRTOINT(CELLS[I,J]));
  END
  ELSE
CELLS[I,J]:=INTTOSTR(0);
  END;{FOR}
  END;{WITH}
  END;

  PROCEDURE Tt1form.CC(VAR I,K:INTEGER);
  VAR
J:INTEGER;
  BEGIN
  WITH SG11 DO
  BEGIN
  FOR J:=1 TO K-1 DO
  CELLS[I,J]:=INTTOSTR(STRTOINT(CELLS[1,J]-STRTOINT(CELLS[I-1,J])));
  END;{WITH}
  END;

  procedure TT1FORM.FormCreate(Sender:TObject);{在创建窗体T1FORM时生成表格并填写统计值}
  VAR
R,I,K,J:INTEGER;
  begin
  WITH SGLL DO
  BEGIN
CELLS[0,0]:=单位{填写第0行各列标题}
  CELLS[1,0]:=总人数;
  CELLS[2,0]:=固定;
  CELLS[3,0]:=合同;
  CELLS[4,0]:=干部;
  CELLS[5,0]:=工人;
  FOR I:=1 TO 5 DO
  BEGIN
  CELLS[I,1]:=INTTOSTR(0);
  END;
  END;

  WITH QUERYTB1 DO
  BEGIN
  SQL.CLEAR;
  SQL.ADD(SELECT DW,COUNT(DW)FROM B_BASETJ F,B_INFO E);
  SQL.ADD(WHERE F.”SHBZCODE”=E.”SHBZCODE”GROUP BY DW);
  OPEN;
  R:=RECORDCOUNT+2;
  SG11.ROWCOUNT:=R;
  SG11.CELLS[0,1]:=合计;
  FIRST;
  K:=R;
  FOR J:=2 TO K DO
  BEGIN
SG11.CELLS[0,J]:=FIELDS[0].ASSTRING;{填写第0列单位号}
  NEXT;
  END;

  I:=1;
  COL(I,K);{填写第1列合计}
  SQL.CLEAR;
  SQL.ADD(SELECT DW,COUNT(E.”DW”));
  SQL.ADD(FROM “B_BASETJ.DB”E,B_INFO F WHERE E.”SHBZCODE”=F.”SHBZCODE” AND F

.”ATTRIBUTION”=”固定职工”GROUP BY DW);

  I:=2;
  OPEN;
  COL(I,K);{填写第2列各单位固定工人数}
  SQL.CLEAR;
  SQL.ADD(SELECT DW,COUNT(E.”DW”));
  SQL.ADD(FROM “B_BASETJ.DB”E,B_INFO F WHERE E.”SHBZCODE”=F.”SHBZCODE” AND F.”

ATTRIBUTION”=”农民合同工”GROUP BY DW);

   I:=3;
  CC(I,K);{填写第3列各单位合同工人数}
  SQL.CLEAR;
  SQL.ADD(SELECT DW,COUNT(E.”DW”));
  SQL.ADD(FROM “B_BASETJ.DB”E,B_INFO F WHERE E.”SHBZCODE”=F.”SHBZCODE”AND F.”

CADRE_ZW”$#@60;$#@62;””GROUP BY DW);

  I:=4;
  OPEN;
  COL(I,K);{填写第4列各单位干部人数}

  I:=5;
  CC(I,K);{填写第5列各单位工人人数}
 END;
 end;

  ......

end.



技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"Delphi数据库开发及统计表格设计"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 Delphi数据库开发及统计表格设计 相关内容
Google搜索中 Delphi数据库开发及统计表格设计 相关内容
雅虎中 Delphi数据库开发及统计表格设计 相关内容
Sogou搜索中 Delphi数据库开发及统计表格设计 相关内容

相关软件 最新回复帖子:

·Windows Vista 中卸载软件的不同方式
·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效


  相关软件 Delphi数据库开发及统计表格设计相关文章
用Delphi4的QReport部件生成报表 也谈为Delphi中数据库报表加网格
在Dephi中使用TStream读写数据的技巧 Delphi中的消息处理
在DEPHI程序中使用ADO对象存取ODBC数续 在DELPHI程序中使用ADO对象存取ODBC数
在DELPHI程序中动态设置ODBC数据源 精简DELPHI数据库系统的补充
如何对数据流 INSERT、APPEND 定制任务栏上的系统菜单
活用 SetSelTextBuf 捕捉来自 Thread 的异常
在DEPHI 4.0中实现动画功能 修改与克隆对象属性
控制系统菜单 怎样建立简单的任务栏应用程序
用修改文件时间的方法来加密文件 用Dephi程序维护Paradox 数据表的索引
有“背景”的窗体 自定义快速报表的打印预览窗口