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

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.

编程语言与工具专题论坛:各类编程语言使用体会分享 淘宝、腾讯、豆瓣、支付宝、网易专家热议大数据分析与BI实战 “创新或灭亡”:Google的80/20只是转移视线的说辞罢了 自动化编排,配合SDN的iMC V7更加开放 [回顾]比尔&#183;盖茨传奇的前半生 IT基础设施与运维论坛:IT基础设施及运维经验分享 记华为HCC2013 Day1:发力高端存储 HCC 2013虚拟化论坛:虚拟化未来发展方向 Windows 8操作系统市场份额增至7.41% Windows 7仍最受欢迎 【开源专访】Sea.js创始人玉伯的前端开发之路 SDCC 2013:阿里周宝方谈“去IOE”战略及实施 百度和高德:最后谁是地图的王者? 【CTO论道】瑞智和康CEO陶建辉:软硬结合是消费电子新潮流 10大高效率原型设计工具 JIRA与敏捷:李小龙教给我们的敏捷开发之道 百度开放云:Light Up The World,与开发者共享云未来 有胆你就来!11个在线编码大赛 CTO如何避免决策失控:第一步-定义角色 后机械硬盘时代,那些引领风骚的闪存初创公司 致远文杰:传统企业如何实现移动化转型? 记华为HCC2013 Day2:SDN开放编程系统OPS打造生态圈 HCC2013:华为FusionCube融合至简,性能至优 已确认Stephen Elop候选微软下任CEO 英语对于软件开发者来说到底有多重要? SDCC 2013中国软件开发者大会成功落幕 新浪微博宋琦:PHP在微博优化中的“大显身手” 8月份浏览器份额:IE浏览器PC端出现反弹 移动端跌出前五 如何让Ruby项目速度提升10倍 跨平台进行到底:Facebook发布Unity SDK 云薪资管理初创公司ZenPayroll:年处理薪资超1亿美元,获多位知名CEO力挺 Twitter开源Summingbird:近原生编码下整合批处理与流处理 各位,帮我一下,非赏急! 数据库快照复制问题,总出错,求救!(50分) 请问这是怎么一回事。win2k(p)+tomcat+jdk1.4.` 在VB中怎样设置Excel单元格的样式?如设置为百分数显示单元格数值? 下拉菜单问题? 请问这是怎么一回事。win2k(p)+tomcat+jdk1.4.` 求救,我财务系统的问题,大大们一定要帮助我呀! 我在调试jsp是的一个错误信息,请指教~~~ 急!!! 一个烦人的问题 关于在应用程序中使用dll中资源的问题 關於並行執行的問題 也许你现在就会改变!! 看 http://Scjp.myrice.com 为什么要学Java 其实我们很封闭! 关于NT的小问题! 请问: 請問哪里有c++的書籍下載? 几个控件重叠在一起,怎样用代码的方式使其中的某个控件在运行时放至最上!?谢! 也许你现在就会改变!! 看 http://Scjp.myrice.com 其实我们很封闭! 如何发布我的网站? 怎样编程在Windows开始菜单的的“启动”栏中添加本程序的快捷方式? 谁有installshield 6.30的license注册文件? 请问:DataGrid在WebForm中明明有数据显示,但用浏览器看就没,为何? 显卡选择问题 ? 也许你现在就会改变!! 看http://Scjp.myrice.com 其实我们很封闭! 一个Acme .....???? 共计350分哟。急急。。。。我在PHP区有发言。但是还连不上SQL SERVER2000呀。。请进 boyqing(阿清):我的问题转到这了! 谁有installshield 6.30的license注册文件? 高手请进! 大家用java都来做什么????? 搞linux,unix底层的在中关村有没有搞头? 请问为什么我的CBuilder中在菜单项File/new下的无法找到RemoteDataModule?我是新手,请帮忙! 这几句TSQL有错?帮忙看看 请教关于网卡与声卡冲突的处理方法 谁有installshield 6.30的license注册文件? 请问如何在页面操作中保存dataset 怎样选定ListCtrl中的一行(包括subItem区域)? 类对象的实例和类的实例有什么区别?? 请问各位大虾,公文管理系统怎么做? 如何将TIF或TIFF文件转换成网页可以显示的JPG,或是GIF文件(最好给出JAR和例子) 这段程序应该怎么编? 各位老大,近来看看吧,一下午了也没有人来回答,苦命呀!加分...狂加....跳楼... TO net_lover(孟子E章) : 在datagrid中如何在获得当前字段内的内容? 高手都过来,这里有好几个问题!!! 安全队列问题?up有分! 如何在XML文件中獲得某個節點下重復的節點的個數﹐用IXMLNodeCollectionMA嗎? 谁解决了我的问题,我再送他100分一共200分!够吧! 滚屏公告栏滚动速度太快,如何调慢?帮帮忙 一个简单的问题? 需要紧急帮助!!!!!! 6只兔,3只牛,2只狗,3只猪,4只鸭. 蝗虫生活在干燥的环境中,它的呼吸器官是 为了不惊动蜗牛,以便用放大镜观察到蜗牛触角上双眼,下列正确的是:A:前后移动蜗牛B:放大镜靠在蜗牛上C:同时移动头部和放大镜D:将蜗牛放在放大镜上蝗虫适于陆地生活的特点是:1身 为什么说人类第一次登月是人类探索太空的里程碑 蝗虫适应干旱环境的原因如题 蝗虫的复眼是适于陆地生活的形态结构特点吗? 若sin2α+2sin2β=2cosα,y=sin2α+cos2β的最大值为M,最小值为m.求M+m.2α和2β均为平方α、β 描写蓝天的诗(现代诗、古诗都可以)、歌词或好的句子、段落是<蓝>天!只要是写蓝天的句子或诗就行 已知曲线c1的参数方程为x=4+5cost 为什么说人类第一次登月对整个人类来说是巨大的飞跃,是人类探索太空的里程碑 蝗虫生活在干燥的环境中,防止水分散失的结构是( )A,肺 B,气管 C,气囊 D,外骨骼 这个参数方程如何消去参数kx=-k/(k^2+4)y=4/(k^2+4)答案是4x^2+y^2-y=0 :求证:(1-2sinθcosθ)/(cos2θ-sin2θ)=(cos2θ-sin2θ)/(1+2sinθcosθ).求证:(1-2sinθcosθ)/(cos2θ-sin2θ)=(cos2θ-sin2θ)/(1+2sinθcosθ).cos2θ指的是cos^2θ~对的 没抄错 你认为哪里错了? 关于鱼体内的寄生虫问题现在菜市场里有一些卖鱼的人经常把自己从河里用电网打捞上来的鱼拿出来卖.我的妈妈很喜欢买这样的小鲫鱼,又便宜又好吃.可是现在河水污染严重,很多鱼的体内都 已知函数f括号x=-x方+2x求曲线y=f(x)与x轴所围城的平面图形的面积S大哥帮小弟做下选择填空吧,我已经照好照片了 谈一下人类第一次登月成为人类探索太空里程碑的意义 急用 都什么鱼有寄生虫?怎样才能杀死?吃了对人体有什么危害? 蝗虫翅膀的特点 2sinα=cosα,求cos2α+sin2α+1/cos^2 α 已知曲线C的参数方程为x=2cosθ y=3sinθ θ为参数,0≤θ 请你根据蝗虫呼吸特点,提出消灭蝗虫的方案 初一上册第19课课后第一大题 登月过程示意图怎么画 已知曲线C﹛x=2cosθ,y=√3sinθ ﹙θ是参数﹚﹜,直线l :y=x-1,则直线l被曲线C所截弦AB长为多少 蝗虫的特征是什么? 关于月球,登月 探索太空的事例内容越具体越好。 已知曲线c1的参数方程是x=2cos... 昨晚家里突然出现不知名的昆虫,请问这是什么虫子,有害么? 蝗虫的足翅触角各有什么特点 已知曲线C:x=2cosα y=3sinα(α参数)与以直角坐标原点为极点,x轴正半轴为极轴的极极坐坐标系下的点M(2,π/4).(1)判断点M与曲线C的位置关系;.(2).在极坐标系下,将M绕极点逆时针旋转θ(θ属于[0,π]) 蝗虫嘴的特点 蝴蝶破茧而出的优美语句给积分! 在平面直角坐标系xoy中,曲线c1的参数方程x=4+2cosθ,y=2sinθ,点M是曲线C1上的动点,线段OM中点是P,(1)求线段OM中点P的轨迹直角坐标方程(2)以坐标原点O为极点,x的正半轴建系,直线l的极坐标方程pcosθ- 家里出现了未知名的虫子出现在家有段时间了 但在家里翻了好久也没发现是从哪来的 有谁认识这是什么虫子 哪来的 或者是什么东西生的 我好找根源 比较蝶类、金龟甲、蛾类、蝇类、蝗虫、蝽象、蜂类、蝼蛄、螳螂、步甲、蜜蜂等触角、足、翅的类型. 蝗虫有哪些特点使其能在陆地生活 蝗虫的生活特点急 今晚用 关于蝴蝶的句子 要优美,又有忧伤的感觉就像言情小说里描写的忧伤 蝗虫的那些特点使其适应陆地及空中生活? 房间天花板上有长的像蛆的虫是什么 蝗虫的翅的特征是什么 蝗虫单复眼有什么作用,是否有适于陆地生活的特点,蝗虫有什么适于陆地生活的特点 动物 昆虫 蚂蚁怎么排顺序? 关于蝴蝶的美丽的句子我需要:1、诗句2、赞美的句子3、类似散文的抒情句 函数y=2cosx(x属于【0,2π】)与直线y=2围成的图形的面积是多少为什么看y=2,y=-2.x=0,x=π围成的矩形 蚂蚁是一种什么样的动物?是害虫还是昆虫呢? 蝗虫有几对翅? 若函数y=2cosx(0≤x≤2π)的图像和直线y=2围成一个封闭的图形,求这个封闭图像的面积 设平面图形A由x^2+y^2=x确定,求该平面图形的面积及其绕直线x=2旋转一周所得的旋转体的体积,尽快啊…… 蝴蝶优美的诗句 已知函数y=2cosx和y=2图像在x∈【0,2π】范围内构成一个封闭的平面图形,利用对称性可得面积为能否帮我画张草图, 求y=2x与y=x^3围成的平面图形的面积 两只鸭换四只羊3只羊换6只兔子,问三只鸭换几只兔 有关蝴蝶的优美句子 把曲线的参数方程化为一般方程:x=3sint,y=4sint,z=5cost (0小于等于t小于2pai) 3年级下才数学题2只鸭子可换4只羊3只羊可换6只兔子3只鸭子可换几只兔子怎样列式 如图,桌子上有四分之三杯水,小健喝掉三分之一,想把水加满,他拿起另一杯盛满水的杯子向第一个杯子倒结果不小心,加满溢出来后他才发现,这时第二杯水只剩下四分之一,那么溢出的水到底是 把下列参数方程化为普通方程〔1〕x=5cost y=3sint 2只鸡可以换3只鸭,4只兔可以2只鸭,1只鸡可以换几只兔?这道题有几种算法? 如下图,桌子上有四分之三杯水,小健喝掉三分之满水的杯子向第一个杯子倒结果不小心,加满溢出来后他才发现 下列与蝗虫适于陆地生活无关的是()A 体表具有外骨骼B 身体分节,有三对足两对翅C 有三个单眼,仅能感光D 具优势与陆地进行呼吸的气门和气管为什么?请说明理由,
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘