说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
Delphi数据库开发及统计表格设计

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操作的普通用户来说,不直观,也不易操作。如何制作并在屏幕上显示出直观的二维统计报表,这是本文所要阐述的主要问题。

以表格形式显示数据库内容一般地采用下面两种方式:

●纵向列表

●交叉统计列表

一、纵向列表

Delphi可以用TDBRID控件,以表格形式非常方便地显示单一或多数据库纵向列表。一般采用两种方法实现:

(一)采用TTable与Tdatasource、TDbgrid控件

在窗体中引入上述三个控件,并在Ttable中控件指出要访问的数据库存放路径及数据库名,在Tdatasource控件中指出数据源与Ttable相连,在TDbgrid控件中指出显示Tdatasource数据源内容,程序运行后,则显示出如图1所示的数据库纵向列表。

该种方法一般用来显示单数据库表格或一对多两个数据库表格。

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

同样,在窗体中引入上述三个控件,并在TQuery控件中用SQL语句给出对有关数据库的查询,在Tdatasource控件中指出数据源与TQuery相连,在TDbgrid控件中指出显示查询的结果。程序运行后,则显示出如图1所示的数据库纵向列表。

该种方法一般用于两个以上的多数据库查询。

在TQuery控件中建立SQL查询有两种方法,一种是在程序设计阶段使用SQL查询,即为静态查询,第二种是在程序运行阶段使用SQL查询,即为动态查询。

1.静态查询在编写程序时,在窗体中放置Tquery元件,并设置对象名称,如Query 1。使用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控件来生成交叉统计列表。其中T StringGrid控件以二维网格形式显示字符型数据表格,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{第0列填写单位代码}

THEN 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:=1TO 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”<>””GROUP B Y DW’);

I:=4;

OPEN;

COL(I

K);{填写第4列各单位干部人数}

I:=5;

CC(I

K);{填写第5列各单位工人人数}

END;

end;

......

end.

如何用SQL查询日期型字段?-Delphi资料 如何在数据库中存放avi文件-Delphi资料 如何在注册表中注册BDE-Delphi资料 筛选数据-Delphi资料 实现不同数据库系统之间的数据转移-Delphi资料 使 用WISQL32 同 时 访 问SQL SERVER 和SYBASE 数 据 库Delphi资 使用Session构件可以在打开有密码的库时不用输入密码-Delphi资料 使用SQL实现字段数据的模糊查询-Delphi资料 数据表的索引被损坏了怎么办-Delphi资料 数据库的密码、日期显示-Delphi资料 数据库应用程序开发中图像数据的存取技术-Delphi资料 数据库中图像数据的存取技术-Delphi资料 数据库转换-Delphi资料 数据浏览部件的应用及编程-Delphi资料 数据文件路径的管理-Delphi资料 随意控制DBGrid每一行的颜色-Delphi资料 通过DELPHI实现JAVA调用ORACLE数据库数据 通过编写代码来设置数据库的别名-Delphi资料 为Delphi数据表格增加彩色 为Delphi提供Pack和Undelete功能 为Delphi中数据库报表加网格 为数据库报表加网格-Delphi资料 为数据库建立索引-Delphi资料 掀开SQL Server 7.0的面纱-Delphi资料 限制数据库记录数-Delphi资料 向数据库发送密码-Delphi资料 一个关于字符串的小问题-Delphi资料 用 QuickReport for Delphi 制作报表 用Delphi 开发数据库程序经验三则 用Delphi 实 现 不 同 数 据 库 系 统 之 间 的 数 据 转 移 用DELPHI本身的控件输出TABLE表数据 提个弱问! 使用treeview控件,我想给它们的节点图标都换一下,可它默认图标都在上面,怎么去掉默认的。 有牛人吗?准考证英文怎么说? 请大家帮我看看,我的机器是怎么回事?我的机器很不稳定!!! 我为大家共享的资源.找我的人太多了,我吃不消.在这里列BILL.大家看看,书不算太多。 很傻的问题,在线等 ★★如何实现按一下按钮可以终止一个正在运行中的循环?请举个例子,谢谢! 谁能帮我提供一点资料或文档! 告急?(在线等待) 用正则表达式,怎么验证日期(yyyy-mm-dd)的输入啊? kao~ 请教有关MSWORD9.OLB的帮助文档是哪个? 怎样知道一个调度执行失败或没有执行???(MSSQL7)上火呀~~~ 如何将自己定义的记录类型转化成Tmemorystream对象? c++builder5的下载地址? 做个调查,来者有分。 ODBC下的数据库查询,急!急! 初学者的问题--com dll服务器如何在客户程序中使用? 如何统计 DBGrid 中记录的个数???? 请教:m_fLogfile.Read(pBuffer , sizeof(VNumAndPassWord)); 错在哪? 谁能替我做一张图片啊? 气死人了,安装红帽子在输入根口令时遇到的尴尬:( 奇怪的oracle数据库错误? 公布我的软件了——网络邮盘,国内日下载量>1000,国外<10 关于堆和栈的队! 请问,准考证的英文怎么说? ASP终极开发:请成功用INSTALLSHIELD设置好IIS的高手朋友进来看看。100分全散了!!!!! 是屏保的问题?还是硬件故障? 紧急救命啊!各位大虾:)98关机时断电出现的故障 初级问题,请教大侠 在C#里面如何取得这个SQL値那? 请教, 扫描的问题... 不好意思,还有问题,关于span,恳请高手答完再下班。 心情郁闷,各位朋友安慰我一下好么。 如何注册JDBC驱动啊!我手头好多的驱动但是我不知道如何的注册这些驱动 在RICHEDIT里怎么实现换行输出? 200分求快速取中值的算法!(thirdapple) Flash Action 如何定时,就像Javascript中的setTimeout()? 保护的问题 用一个关于Printer对象的问题?各位大虾,初来乍到,请多多关照。 请问如何自动提交一个FORM? 请问各位师兄:web开发如何起步?例如使用JSP? 求助! 如何知道电脑中的网卡是什么型号的? 大家请帮忙,兄弟必重谢,分都给了 如何制作含有msdn数据库的安装程序 Web Service服务程序如何增加对SSL的支持? 怎么還可以上網﹐向各位大蝦求救 请问如何自动提交一个FORM? 如何处理并发访问! 如何在网页中打开*.ocx组件?是否能打开? 如果给我再来一次的机会...我还是想说... admit和recognize的区别作为 承认 时的区别admit和recognize作为 承认 时的区别 what he has done shows that he is not a man -------.答案是whom you can believe in为什么that you can believe 为什么不是这个 闲居初夏午睡起二绝句这两首古诗描写的时候什么时候的情景.还要有从古诗中找出的理由列出来 汉译英.高中英语句子.并用到后面括号中的相关词组.1.超过60%的学龄儿童家中拥有电脑.(access to )2.她与他的心情并不合拍.(in tune with)3.他声称已经十天没有吸烟了.(abstain from)4.大部分的 Can you guess ______?A.what is that man B.who that man is C.whom that man is D.who is that man 英语翻译用中文 或罗马音 来翻译英文,如有大神音译,必定造福后人,比如学日语,不要,就是音译,牙麦迭 英语中我你他顺序怎么排 Who is that man?选哪一个 Cool,Guess! 林俊杰的one lucy has been my friend since she since she came to china 对划线句子提问划线句子是since she came to china __________ __________ __________lucy __________ your friend ? 快一点谢谢 现在才明白、可能已经晚了、英语怎么翻译 what's the difference between watching a movie and reading books求作文 请各位帮我用英语翻译一下这几句话!急需,急需!请各位英语高手帮我翻译一下,感谢万分,我急需!寒假就要到了,这次寒假我想去比利时的首都布鲁塞尔游玩.布鲁塞尔是比利时的首都,是一座古 can you guess ( ) the man is 用who 还是whom april 短语汉译英!"第二外语"用英语怎么说?是second foreign language吗?掌握一门二外多么重要啊 怎么翻译? “你明白吗?”英语怎么翻译? april 有关孔融让梨的故事(完整的)快! Can you tell me -that man is 为什么不填what 问职业,而用who? April Fool愚人节乐一乐夫妻离婚争孩子,老婆理直气壮说:“孩子从我肚子里出来的,当然归我!”老公说:“笑话!简直是胡说八道.取款机里取出来的钱能归取款机吗?还不是谁插卡归谁! 孔融让梨英语版英语,不要是汉语 他整个早上都很忙.请用英语现在完成时翻译 考四级该怎么复习 So far I ____(make) quite a few friends here. 谁知道这个是什么字.懂有个字 上面是一个 厌(简体) 下面是一个 鬼 字 APRIL FOOL'S DAI he went to New Zealand last month,But he________(make)quite a lot of friends so far Mary is _______ than Alice.A.more experienced a teacher B.a more experienced teacherC.more an experienced teacher D.more experienced teacher 大学考英语四级.平时应该怎样复习?..考过1次了,成绩不怎么样,不知道该怎样复习,. full version的中文是什么 速求速求 Mary’s hair is longer than_____ Last year,there 15 students in our team.This year,there are 20 students in our team.(变同义句)句型转换1.___Would you mind going back to your seat?(作否定回答)___No,not ____ ____.2.I enjiy running every morning.(改同义句)I____________ 49plants avait you in the full version. Sandy is ___at playing soccer than SimonA.better B .good C.wekk D.best STAY FOOL,STAY HUNGRY --- YOU'LL BE HAPPY .以前男朋友在我博客里的留言, try the full version什么意思 Sandy is (tall and thin).对括号部分提问.( )( )Sandy ( Sandy 后只有一个空,look like以外还能用什么好呢? 快考四级了,怎么复习?各位高手们出招吧最好具体点 make friends 有过去式么?高手给说说.帮忙翻译下2个句子:1."昨天我交了个朋友" (不知道用make 还是made)2.我交了两个朋友..(make friends 是交朋友,可数量怎么表示呢?make 2 friends ).. What on earth is that 与 What is that exactly (那到底是什么?) 两句一样吗? I'm not a fool,okay?someone why don't you just go to hell!You guys deserve each other!You HAPPY NOI'm not a fool,okay?someone why don't you just go to hell!You guys deserve each other!You HAPPY NOW这是完整的 full version 侃的粤语读音?粤语怎么读 "闲居初夏午睡起二绝句"描写了什么季节?一.要长!二.不能和别人的一样!三.要两首都要回答!四.要有季节!五.分明一二两首!六.要有意思! Tom can make friends______(easy)because he is very outgoing that is what I trying to do 是什么从句Jim,that is what I trying to do 是什么从句 闲居初夏午睡起二绝句描写什么时候的情景松阴一架半弓苔,偶欲看书又懒开.戏掬清泉洒蕉叶,儿童误认雨声来. )20.Tom is ______than Ben.28.Are you in china ______ January Yes,I usually in china _____January.A.in,on B.in,in C.at ,in)29.Was it ______yesterday Yes,it was.A.snow B.cloudy C.rains)30.My friend peter _____very well.A.swim B.running C.sings)31.The r 求“数”字广州话读音. 闲居初夏午睡起二绝句描写什么时的情景,从诗中找理由 I .make new friends since i moved here.A.can't B.couldn't C.haven't been able to.D'm not able to请帮我选正确答案以及原因 闲居初夏午睡起二绝句描写了怎样的情景 This is the restaurant___we enjoyed our meal last weekA.that B.in which C.which D.in that Jim has quite few friend here .So he ofend feels lonely. 侃的读音? 1.You are looking for the doctor.She is busy.2.This is our school.You visited last week.把它们改为定语从句 confess/admit的区别 英语翻译this drill only available in the full version gst professional完整的 任务型阅读!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘