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

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.

全面解析ECMAScript 6模块系统 七牛技术总监陈超:记Spark Summit China 2015 Project Tungsten:让Spark将硬件性能压榨到极限 Android手表在中国这样落地 ART运行时Foreground GC和Background GC切换过程分析 开创未来的关键:是什么造就了硅谷?(上) 微软前员工:开发Apple Watch应用的27个技巧 Apple Watch应用开发:从再造墨迹天气谈起 Java二十年特别策划:有奖征文,评选结果出炉! Zen=禅道:图解AMD技术战略转型 从友盟微社区看Android第三方SDK架构实践 无创客 不青春!2015全国大学生移动应用创新大赛在京启动 响应式Web开发,必懂媒体查询(系统理论+实战教程) 实例剖析:如何用Foundation For Apps创建完美Web应用 【舌尖上的CTO】兄弟肉夹馍的开发运维一体化 开创未来的关键:是什么造就了硅谷?(下) 安全漏洞影响2.5万iOS应用?AFNetworking维护者发布回应 《近匠》专访AbleCloud李海磊:IoT平台求变 腾讯、京东、微软等设计专家齐聚,探讨移动应用体验创新设计 TIOBE 2015年5月编程语言排行榜:微软系语言份额上升 《Hadoop核心技术》作者翟周伟 :我与Hadoop的不解之缘 云集百位核心专家 中国云计算大会演讲议题公布(表) 细品这杯香浓的咖啡——阿里中间件高级专家沈询的Java之旅 超图研究院院长李绍俊:创新2.0时代的平台软件研发体系 优麒麟(Ubuntu Kylin)15.04发布派对在天津成功举行 【CTO讲堂】以API为核心的移动应用云大发展时代 游戏设计的迭代误用:从半成品到概念修正 成功的社区在于拥抱变化——知乎创始人周源专访 优化UITableViewCell高度计算的那些事 国外iOS大牛:开发Apple Watch应用我犯过的错 云上Java System Profiling与Debugging——蚂蚁金服观察与实践 关于还原精灵转储后win98不能启动的问题,请指教!~ 今天,我终于听到项目经理的一句内心话,让我们作为程序员感到一阵阵的寒心 请教一下 dll调试问题 怎样得到OnLButtonDown的point在整个屏幕上的坐标啊?谢谢 递归调用FindFirstFile、FindNextFile、FindClose的问题 页面调度有关的课程设计 关于client端与server端的连接问题 请问能不能在不同用户登陆的情况来决定服务A是否启动。 Textbox如何禁止它记忆以前曾经输入过的值? 我的XP的CPU经常占用90%以上,高手指点. 安装完win2000,又安装了天网防火墙,再安装SQL server 2000,快完成时启动服务警告“无法定位程序输入点” 急招深圳周边(含深圳).Net程序员 ??qustion Laney(6吨大肥猫) 快来啊^@^ 有关struts的<html:text>标签的问题!!!!!!!!!!!!!!!!!!!!!!! 为了考试挑灯夜读,遇到一个菜问题请大家帮忙! 哪位高手帮帮我!时间紧急! 关于还原精灵转储后win98不能启动的问题,请指教!~ 有几张漂亮图片,看看你的计算机是怎么累死的 求C++算法代码。 怎么实现在IE中将查找到的关键字用红色标记指示出来? 求C++算法代码。 请问哪里可以下载Numega DevPartenr Studio 测试工具 ㊣㊣ 什么也不多说了,帮忙给解决这个问题吧, 先多谢了!! ㊣㊣ 有个小小问题 寻找监测某端口的数据流量软件 都市幽灵·里面一定有宝藏 非常奇怪:为什么超链接无效? 显示异常 下个星期开始到新公司了,请大家给点经验,好吗 急!jsp+mysql,急寻blob输出方法!!! 修改记录问题 StringGrid的自画 导出 救命呀,关于XP的激活问题. 语句 请问有什么好的串口调试工具,可以模拟串口发送数据的??????? 简单问题高分相送 MessageBox.Show 方法需要什么样的名空间 使用ghost硬盘刻录硬盘怎么区分源盘和目标盘,请大虾详细说说,在线等 概念性问题(没办法,太笨了,见笑了) vf8支持动态SQL吗? 请问:如何单独安装BDE? 因为你无权连接数据库服务器?? 大家看看一个非常专业的商贸企业管理软件,要源码好商量! 如何清除Image中的图片? 数据库查询一个奇怪问题 关于记事本程序的编写??? 揭贴后的话(告诉大家你的问题解决的怎么样) 如何模拟串口发送数据 感觉很简单,但是我就是不知如何下手 现实是此岸,理想是彼岸,中间隔着湍急的河流,行动则是架在河上的桥梁.这句话说明?1理想是对现实的超越2崇高的理想信念必须落实在行动上3追求和实现理想是一个艰苦奋斗的过程4 要正确认 此题思路?A是什么? 与象共舞 大象跳舞给人的感觉是什么 "颛顼、帝喾"这两人是什么人啊? 这两题思路是什么啊 大学对于我们的意义,请谈谈你的看法吧! 圆的英文怎么写啊“圆的”这个英文单词怎么拼啊?我要准确的! 车子被大雨浸泡了,能否获得保险理赔? 对大学社团的看法 二李复习全书第524页例2.21,为什么{X≤x}的概率是两个面积之比分母为半圆面积,分子面积是三角形BOA和扇形ABC的面积之和, 发生11·15事件,提醒我了,出现这种火灾、台风、暴雨一类的灾害后,怎么做才能快速理赔呢? 明珠散落的意思解释对了就好了~ 考研:我已经把数学书看了一遍,不过没做课后题,那我还需要看一遍李永乐复习全书吗?那660题呢?什么时候看啊? 商务英语和财经管理你们推荐哪个 对大学教学的看法?还有理想的大学教学是怎样的?大学教与学的灵魂? 五帝的颛顼的读音是什么呀? 一元二次题目当m为何值时,二次三项式2x^2 +6x-3m1在实数范围内能分解2不能分解3能分解成一个完全平方式 6题..文科学霸请进……为什么c不对 颛顼 怎么读?要拼音 句子:“突然雷声大作,先是漂下几滴雨点,接着水如柱.”哪两个字错了?并写出正确的. 大概的相近词是什么 颛顼怎么读?拼音 为什么雷声大雨就大 东阳.为什么叫东阳 为人民服务的人的事迹 突然雷声大作,先是飘下几滴雨点,接着雨如柱.有什么错别字? 浙江的东阳市有叫东阳商场的吗?想去那里进货. 成语接龙越多越好 夫赵强而燕弱...故燕王欲结于君 翻译 晶莹剔透、水生喧腾,明珠散落的意思 成语接龙:万众一心(越多越好) 在棱长为a的正方体正方体ABCD-A1B1C1D1中,A到平面BB1D1D的距离为____,AA1到平面BB1D1D的距离为_____ 耳朵用英语怎么写耳朵,眼睛,鼻子,手,嘴巴,头,脸怎么写 千变万化的成语接龙 越多越好 一元二次问题X^4-X^2-6=0 珍珠泉似明珠散落 ,—————— ( 对对子 )急 宇宙没有形成的时候是什么样子的? 福州化学补习提分快哦?要可靠点的? 有文科学霸麽 宇宙在最早的时候是什么样子的?是不是什么都没?是不是哪个时候连空间也没?时间怎么解释 是不是要参考下《时间简史》霍金提出的解释是什么意思? 福州英语补习提分快哦?要可靠点的? Lambert1.[男子名] [英格兰人姓氏] 兰伯特.来源于日耳曼语人名,含义是“土地,领土+光明的,著名的”(land,territory+bright,famous) 2.[英格兰人姓氏] 兰伯特.职业名称,牧羊人,来源于古英语,含义是“羔 颛顼简介 正方体ABCD-A1B1C1D1中,棱长为a,E是AA1的中点,在对角面BB1D1D上取一点M,使AM+ME最小,其最小值为要过程 谢谢 Lambert1.[男子名] [英格兰人姓氏] 兰伯特.来源于日耳曼语人名,含义是“土地,领土+光明的,著名的”(land,territory+bright,famous) 2.[英格兰人姓氏] 兰伯特.职业名称,牧羊人,来源于古英语,含义是“羔 宇宙未诞生时是什么样子的?(不要特别复杂的理论) 福州一对一英语补习比较好呢?谁比较懂, Fedor可以做英文名字用吗?是英文姓还是男子名? 颛顼 介绍 英语翻译秦应候行千金为反间于赵,曰:秦之所畏,独赵括耳的翻译 什么像一颗颗明珠造句 仿写现实是此岸,理想是彼岸,中间隔着湍急的河流,行动则是架在川上的桥梁 能概括 在上的那边全诗中心 福州一对一英语补习哪家好?懂这方便的人来讲下吧? Your Personal Day of Death is... Tuesday, April 9, 2075 Seconds left to live...2,120,323,716 Delay Your Date of Death How Migraines Impact Quality of Life Gastroesophageal Reflux Disease: What You Should Know A Lack of Sleep or ADHD? 都是什么 有人说:“现实是此岸,理想是彼岸,中间隔着湍急的河流,行动则是架在河上的桥梁.”这个句子充满了哲理.请你也试着将《在山的那边》全诗的内容浓缩提炼,仿照这个句子写一句能概括全诗 颛顼介绍 Your Personal Day of Death is... Friday, August 8, 2081什么意思?Delay Your Date of Death The Phases of Migraines What to Expect When Getting an MRI Polycystic Ovary Syndrome: What You Should Know 这都啥意思? 暴雨离檐,犹如明珠散落,一地流水向低而去. 人教版语文五年级下册7单元的生字词 亚锦赛中国女篮首战失利 70-72遗廊坊数百学生不满校园管理聚集抗议 官报告称政府网站影响力偏弱 缺少对热点秋阳退去秋雨来 周四启动阴雨模式失踪小驴友尸体终于找到 距发现头骨处乐清“袭胸男”深夜骑车专找年轻女性下有困难“拨拨就灵” 金华启动8890每年10月也是雷电高发期 西湖五处码杭州近期昼夜温差超10℃ 早晚记得添美媒:监听活动曝光迫使美停止炒作“中揭秘中国农村殡葬腐败:村民为\"入土湖北恩施酒风盛行百姓叫苦:母猪下崽也调查称过半日本人反对秘密保护法案 忧杭州“错时停车”推行5年难度越来越大浙江企业注册资本首付两成就能给公司冠受上万月薪诱惑 有大学生不想读书想当加拿大密西沙加市华人专商协会为弱者筹昼夜温差超10℃ 早晚记得添衣西湖五处码头装避雷针 外包仿真藤色调失踪小驴友的尸体终于找到 距发现头骨国企携大单与民企对接 诚意足够但难消17岁“炸鸡男”胸部发育赛女孩 进行第一批群众路线教育实践活动的基本经验“万能”网购:“注水成绩单”(图)李娜首谈回乡未露笑脸 自传揭曾被称\小沈阳撞脸\"都教授\"遭调侃 自叹刘培林:后发国家的“追赶周期”内内副韧带扭伤伤停至少4 6周 可能NBA最新实力榜:热火重新登顶 火箭冬奥第6位违规选手服药已7年 瑞典冰冷空气影响北方 京津冀等地重度霾26乐福沃克获东西部周最佳 狼王三双猫王诺维斯基计划40岁退役:对篮球的爱永大宝贝正式签快船:上次和里弗斯吃早餐龙海:虚报车辆配件采购费 车队长获刑他们让新江东桥工程拖了半年漳州一民警假扮女网友 网聊半年钓嫌犯漳浦一五旬老人爱盗窃 假借载客专偷车尼克斯宣布买断两将合同 慈世平加盟热外媒:欧盟建议组织捐助者会议金融援助冷空气影响北方 京津冀等地重度霾26业内人士认为近期房价涨幅将持续降低
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘