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

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.

Touch-Pay发布 移动联通在手机游戏领域联合推融合计费SDK 如何组织大型JavaScript应用中的代码? Robert Scoble:戴Google Glass两周后 再也不想摘下它 赶时髦?Facebook CEO 2013年将领取1美元年薪 蓝港在线CEO王峰:我在网络游戏行业十年从业记 CMDN Club 27期:从儿童音乐教育到移动碎片化管理 聚焦全球移动市场——你所不知道的俄罗斯 MemSQL:号称世界上最快的内存-关系型数据库 兼容MySQL但快30倍 PC衰落 Intel转投Google挖掘移动市场潜力 移动周报:500元体感、精确到0.01毫米的Leap Motion TUP第29期:王淮、龚世海谈如何打造优秀的技术团队 一网打尽13款开源Java大数据工具,从理论到实践的剖析 从用户体验的善与恶说起,做用户爱“玩”的教育应用 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi “BlackBerry 10移动应用开发大赛”应用推荐 Java程序优化的一些最佳实践 Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具 Anchora鲁为民:PaaS是我的兴趣 次世代IDE Light Table 0.4发布 带来众多更新和改进 别再设计易碎的Web API! LinkedIn:55人支持2700位员工,2亿用户的大数据分析 Brian Krzanich是谁?这位新CEO预示英特尔未来怎样? HTML5开发者心声:浏览器兼容性成最大问题 传微软6月下旬将发布第二代Surface 7到9英寸全有 Turbulenz:HTML5 2D和3D游戏引擎开源 携程开放平台总经理夏天:内容+高转化率成就开发者 直接拿来用!最火的Android开源项目(一) Qunar 谌振宇:旅游行业的移动化如何布局? 大数据分析“铁三角”: Teradata数据仓库、Teradata Aster与Hadoop Teradata专业服务:打造行业企业的“数据科学家” Xamarin Evolve 2013:竭尽全力让C#服务iOS与Android 关于按钮、工具条等问题,请进来看看 有两个CTime变量,t1,t2,我想把t1的日期部分和t2的时间部分合并成一个CTime变量t3,怎么实现? 有谁知道珠海的做J2EE薪水有多少(平均水平),谢谢大家! 我编写的CORBA为何总是提示"File not found 'OrbPas.dcu'" 准备今天打辞职报告! 请教高人!!!!!!!!!!!!!!!!!!!!!!!!!!!! LINUX支持多處理器 ActiveReports P2 套打票据打几页后出现套不准,请教? 关于delphi中Label控件的字体问题?? 请问哪里有ASP+ACCESS 的查询源程序下载? 小弟需要一份详细的数据库设计说明,不知有没有人可以帮忙? 請問銀行系統一般用什麼數據庫! 请大家推荐一个方便好用的网格控件,可以编辑、保存单元格的内容,bug又少的 急死我了,这行SQL语句错在那里呢? ORACLE8I安装问题,急。。。。。。 还是这两本书110分 急救:主板CMOS故障!! 有谁知道在JBuilder中插入一副图片应该用哪个Compoent 加急问题??关于.properties!!在线等, Win2K下控制台程序处于选定状态,如何恢复? 窗口自动关闭 救命啊!严重问题!怎么老是显示E2316:TempSongList::PlayFirstSong()is not a member of 'TempSongList'? 关一个小笨蛋生存的困惑,还请各位GG、JJ一定要帮帮忙呀~~~~ Interface中添加方法的问题,请高手指教!再线讨论!! c#访问FOXPOR数据库问题 WORD求源代码加分之四 怎么样获得一个 EDIT 的 句柄 ?? 请问嵌入网页中的Activex如何调整自身的大小?请各位高手帮忙!谢谢! Oracle和SQLSERVER中5用户10用户到底是什么意思? 我身边的一个PLMM说,她想找一个成熟、幽默、聪明的程序员。 一个局域网内访问odbc数据源的问题 对女孩子不能太热情了! 一个easy 的question 请精通C#与VB.net的大虾帮忙翻译一下 在异地拷贝一个文件(200M以上)到本地,如何做 《C++程序语言》(特别版)怎么样 getContentPane()是什么意思? 高手请进!嵌入网页中的Activex如何获取加载它的浏览器对象?谢谢! i am 24 year old ,but i have nothing 请问哪里有exchange2000 server??? XP,IE 6 SP1,安装JRE 1.4无数次,<APPLET>标签下的东西仍不能看,<OBJECT>可以,为什么??!!求救!! Socket发送接收的问题! c++ builder6的盘 mapx 问题? partition magic 8.0 一个既包含静态图象又包含视频播放的视频,怎样把它抓屏下来??? SOS!!!一个有关全文检索,以及文档的数据库存储的问题,急急!各位大侠出招啊,在线等候 请问如何在程序中将CEdit控件设为只读或取消只读, Java认证问题 请问你们认为哪种操作系统更好用和稳定? 关于mfc dll wizard 做出来的dll 的内存泄漏问题!! 有一杯接近饱和的氯化钠溶液,欲使其变成饱和溶液,下列方法不合理的是A添加少许氯化钠固体B恒温蒸发部分水C适当降低温度D加一杯更浓的氯化钠溶液 构建基因组文库法特别适用于原核生物基因的分离 这句话对吗? 在真核生物中,DNA和RNA都是遗传生物,其中DNA是主要遗传物质.这句话为什么错 Na2CO3.nH2O这么读?还有钠暴露在空气中发生哪些反应?最终产物是什么呢?急! 应用了胶体的什么特性1、肥皂的盐析2、土壤中的粘土有利于保持某些肥分3、陶瓷工业净化粘土(除Fe203)4、静电除尘5、微波手术刀可止血6、FeCl3溶液也可止血7、明矾净水8、血液透析(血 氢氧化钠久置在空气中会有什么现象 苯甲酸钠是什么? 甘氨酸是什么? 氯化银放到氰酸钠溶液里面为什么就溶解了氯化银不溶,氰酸银可溶...然后呢? (一道化学难题求急)为什么用碳酸氢钠沉淀镧系离子,杂质就是比碳酸氢氨和草酸多?料液:LACL3 沉淀剂:小苏打往100ml浓度为0.3mol/l料液中缓慢加入160ml浓度为5g/100ml的小苏打溶液沉淀生成碳 汽油跟什么混在一起的情况下不燃烧 下列事实与胶体性质无关的是(单选)在豆浆里加入盐卤做豆腐在江河入海口处易形成沙洲一束光线照射蛋白质溶液时,从侧面看到一束光亮的通路FeCl3溶液中滴入氢氧化钠溶液出现红褐色沉淀 “脱水缩核、必须氨基酸、多肽”名词解释? 西红柿推测它们传播种子的方式并说明理由 蒲公英推测它们传播种子的方式并说明理由 急)下列各组物质中,都是强电解质的是下列各组物质中,都是强电解质的是 ()A.HNO3、HCl、BaSO4B.NH4Cl、CH3COOH、Na2SC.NaOH、Ca(OH)2、NH3·H2OD.HClO、NaF、Ba(OH)2希望有人帮忙,理由 越详细越好.以后遇到 25个氨基酸缩合成多肽链所产生的水全部用于光合作用生成多少分子的氧气 汽油机用完汽油后又加了汽油为什么打不燃了? 溶液中氯化铝对氯化银的溶解有什么影响、氯化铝是共价化合物 水是强电解质还是弱电解质?一楼..何解呢?二楼.电解质的定义是”在水溶液里或熔融状态下能够导电的化合物”..是啊!纯水不能导电.那它就不是电解质了吗? 举例说明胶体的应用. 下列事实与胶体性质无关的是()?A 在豆浆里加入盐卤做豆腐 B 河流入海处易形成沙洲C 一支钢笔使用两种不同牌子的墨水,易出现堵塞D 往氯化铁溶液中滴入氢氧化钠溶液出现红褐色沉淀 为 铁碳合金相图中杠杆定律的应用 胶体有什么?举例20个用途也算一个 下列不是因为胶体的性质而产生的现象是A.石膏能是豆浆变为豆腐B.明矾净水C.花粉在水面上做布朗运动D.太阳光照在弥漫灰尘的室内,可看到从窗口到地面出现一道光亮的通道 请问二氧化碳与水生成弱电解质那它如何与氢氧化钠强电解质反应呢 怎样开车汽油才能充分燃烧? 含氧元素质量相等的CO和CO2的质量比是多少 水是电解质,而且是弱电解质,那为啥蒸馏水不是电解质?难道是有杂质的水是电解质?但电解质都是化合物嘛 高速公路上的这种路面标线是什么意思? 悬浊液的分散质可用过滤的方法从分散剂中分离出来 为什么这句话是对的 浓硫酸和脓硝酸混合,氧化银触点时.产生的二氧化氮气体应该怎么降解,或者分解.气体可以使用向上排空气法通入碳酸钠溶液里吗?会有什么反映. 为什么汽油不能充分燃烧? 相同质量的CO与CO2氧元素的质量比是具体怎么算 “将浓硝酸分解产生的混合气体干燥,然后插入插入带火星的木条,木条复燃,说明二氧化氮能支持燃烧.为什么? 盼望用英文怎么写? 以知CO2和CO中氧元素的质量相等,则CO2与CO的质量比为 硝酸和什么离子反应会生成气体呢. 锌和铝 离子半径大小比较 22岁女性阴道瘙痒用什么药好?什么都正常,只是外阴和阴道瘙痒.病情描述(发病时间、主要症状等):我是女生,有男朋友 ,外阴和阴道瘙痒,持续很长一段时间了,我有脚痒,是不是有时候不注意传 多少克二氧化碳中含有6.4克氧 求一种是牙膏状,但是能像汽油一样燃烧的材料.就是能像汽油一样,用火点一个小地方,就能把其他地方一起引燃. 关于胶头滴管的注意事项有哪些? 与核糖体形成有关的结构 设想把一块铜分成两小块,再把每小块一分为二,一直这样分下去,分到什么时候仍能保持铜的的性质呢? 现在科学家最热门研究的化学能源是什么除去氢能太阳能,这些常见的,有没有特殊一点的能源在被研究! 1.6克某物质跟氧气在密闭的容器里完全燃烧产生4.4克二氧化碳和3.6克水则该物质中一定含有 烧碱露置在空气中发生的变化 相同质量的CO和CO2中.含氧元素的质量比是多少? 胶体界面化学在生活中的应用 氢氧化钠溶液长期露置在空气中会怎样 要使Co和Co2中含有相同质量的氧元素.则Co和Co2的质量比为多少? 氢氧化镁和硝酸银反应的现象 帮忙用英语翻译一下这句话:“我们应该坚定这个信念并把其上升为自己的理想,坚信这个理想终究会实现.” 海边晒盐场从100克海水中晒出2.8克粗盐,照这样计算,20万顿海水可晒出粗盐多少万吨?多少万吨海水可以晒出粗盐1.4万吨?用四分之一、0.5和8与另外一个数组成比例,这个数可能是多少?全部列方 甘氨酸有什么化学性质? 下列物质水醋酸盐酸烧碱其中属于弱电解质的是水,氨水,盐酸,液氨,醋酸,氯化银,乙醇,醋酸铵,氯气 搜集缩写,请把您知道的缩写告诉我,例如RP代表人品......任何方面的都行! 仿写:如果我们的生命是一缕阳光,就为大地洒下一点温暖; 如果地球不绕着太阳转 这个现象叫什么?就是这个 请回答我谢谢或者 你还可以帮我具几个这样类型的冽子如:河水从来不会逆流 实验室用二氧化锰和浓盐酸反应制取氧气,今欲制氯气44.8L(标准状况下)需要二氧 美国辱华电视主持人称不会辞职 未答应“免费”医疗让俄罗斯进退两难 仅约3上海自贸区改革红利初显 打造宽进严管报告称撒哈拉以南地区明年经济增速将达学者解析温家宝首次出书谈教育:出身教山东菏泽回应城建局集体打牌:6名员工内蒙古调查乌兰察布新豪楼:立即停止办新一批法规今起实施 手机预装软件应报俄媒体称斯诺登将供职于俄知名网站新消法规定:消费遇商家侮辱搜身可索赔律师称斯诺登将从11月起在俄大型网站直击吉林松原震区:村民“抱团”度寒夜斯诺登将为俄网站“打工”阿曼向世卫组织报告首例新型冠状病毒确伦敦股市股指10月31日下跌简化赴英签证手续今日实施大限将至 叙化武设施“全部”销毁“南溪”天然气管道保加利亚境内段开工中国代表呼吁尊重各国自主选择的人权发阿尔及利亚对摩洛哥撤回驻阿大使表示遗俄罗斯西北地区强风暴后电力全面恢复供火龙果汁香菇汤圆绝望的背影…探索炼丹奥义 细说《龙武》周末经验副没猜到结尾!王思聪生日堪比海天盛筵:嫩模刷脸竞艳滴滴快的上线新功能 一键叫人打麻将《魔侠传》为了升官加爵 我买了一箱杜一个管家的自我修养从魅蓝Note允许线下加价,看魅族的血腥杀跌下暗藏三大意图找软妹子看这里 《仙途2》萌系角色评溢美金融1亿TMC转型专项资金 获行阿尔卡特推新机 Pixi 3是要割肉还是捂股,看完你就该做决定了Bhldn “Iconic”婚纱系列为白纱添一抹粉色2015第一波壁纸来袭 《兵王2》细考拉军事快讯:中国首创反舰火箭炮元灵石狂“享”曲 星辰变新服预注册今传统企业做电商会有成功的机会吗福利人人有份《成吉思汗2》军饷大揭秘
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘