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

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.

VB如何在VB中直接显示无格式256灰度级图像 VB如何在窗体中平铺图片? 三维字的实现 -VB资料 闪动窗口标题 -VB资料 闪烁的标题栏 -VB资料 实现画面的各种切换方法-VB资料 实现屏幕变暗的效果 -VB资料 实现图像切换效果 -VB资料 提取Win9x拷贝的动画-VB资料 一个图像滤光处理程序-VB资料 一个用VB5.0 实现的鼠标绘图程序 用VB6.0制作画图板 用VB6设计有趣的动画场景 用VB编程绘制网格图像 用VB绘制抛物线动画曲线 用VB绘制正弦动画曲线 用VB实现“百叶窗”的图形特效 用VB实现托盘动画图标 用Visual Basic 定制BMP文件 用Visual Basic的Move方法实现动画效果 用Visual Basic与MS-Draw开发通用作图软件 在VB中获取可执行文件及Windows 95快捷方式的图标 在VB中进行各种图形切换的方法 在VB中制作可滚动的图像显示 在图片上平滑移动文字 -VB资料 VB怎样使程序的标题条闪烁? VB制作图像的Mask图 CWinInetConnection-一个封装了WinInet API函数的类 -VB资料 MODEM通讯意外处理-VB资料 MsComm 文字传输-VB资料 PING一个IP地址(向它发送一个数据包并等待回应) -VB资料 非常着急,各位高手一起来帮我研究一下这个工作流系统怎么用? 简单问题,肯定给分! 据说高程的通过标准是上下午加起来算了? 请斑竹帮忙 请问各位前辈: 在执行中出现"incorrect syntax near 'JCSZ'"的错误提示,如何解决? 下标越界是什么意思啊? 一个基础性的问题,同样一份C/C++源代码可以在UNIX 和WINDOWS运行需要具有的条件是啥??? 在一台计算机上安装两个键盘同时接受输入的问题 对XML文档中的数据能不能进行SELECE操作???? 如何用JAVA实现263邮件那样的邮件粘贴功能 请教各位大哥,小弟最近遇到麻烦,为什么我的程序安装时,出现expsrv.dll无法注册的提示?expsrv.dll有什么作用?怎样闭掉? 如何在两个结构相同的库之间倒数?? 请问如何简单确定右键点击的是哪个控件? 有哪位高手可以给出windows98登录时网络服务的身份验证模块的程序或相关资料的呢?非常感谢啦 在CTreeCtrl中同时使用系统图标与自定义图标的问题?? SHGetFileInfo()为什么在Win2000下工作不正常? 请问高手:DataGrid的问题 jsp和servlet是怎样交互的? 请问 有什么方法能实现 在几个数中随机取出几个数 谢谢 请问:在执行文件DPR中有一段代码出现错误,请各问指点! 两个问题:1 关于.NET中 一个新控件propertyGrid1的使用问题;2 我想生成一个由lable和TextBox合成的控件(label在左,TextBox靠其右),怎么办? 分栏打印 依旧是undefined function mysqsl_connect()问题 急:如何在生成的exe中添加新的属性页,显示更多文件信息? V-DVD ROM!? MSDN上的例子需要uafxcwd.lib,怎么找不到呢? 请问窗口的other事件是如何触发执行的 JSP如何学习 vc在什么时候会引起小喇叭的叫声 请教高手,如果在VB里实现内存共享? 用什么方法可以转换图片类型?譬如将BMP格式的转换为JPEG格式的,请各位大哥给点提示!!! 关于vb script数组和函数功能的二个问题!高难度! 关天打印问题? 只能最小化到屏幕的左下角 *急:无为,acptvb,请帮忙看看http://www.csdn.net/Expert/topic/426/426766.shtm (有关XMLHTTP) 在php中要取出一段字符串的前n个字节,而又要判断最后一个是中文还是英文,如果是中文则将最后半个字符省略应该怎么做? 有在BCB5中用过sapi5朗读中文的朋友,高分送上! 最初级的问题,关于编译程序的。 重庆市信息产业办公室荣获全国最差信息产业办公室称号 大家用PB创建Jaguar应用程序时,一般创建一个大包还是多个包阿? 奇怪的问题,来者有分!没回答问题的先到先得! 如何把临时表建在内存中 请教一个关于DELPHI多线程的问题 *急:无为,acptvb,请帮忙看看http://www.csdn.net/Expert/topic/426/426766.shtm(有关XMLHTTP) 比爱情少一点,比友情多一点,即不讨厌又不来电,你能做到吗? 请教一个问题,一个分两帧的窗口,分别是两个CView的子类。一个view里的下拉框选中一条记录,使另一个view刷新。不知道用什么mfc函数。 有关新开窗口的问题! please intrduce a good muti-root soft for win95,win98,winme,win2000,winxp 求助:哪位大侠能介绍一下网络传输设备(象 HDSL、Cable Modem)的品牌、厂家和性能? 我的ie浏览器怎么了? 搞软件开发时应不应该是一边看书一边搞开发? 用滑轮组匀速提升重为3000牛的物体,作用在绳子自由端的拉力为625牛,拉力做功的功率为1875瓦,滑轮组的机 在整数数位顺序表中,每两个计数单位间的进率是十.小学十年级数学题判断对错. 每相邻两个计数单位之间的进率是什么 某滑轮组匀速提升重为2000N的物体,作用在绳子自由端的拉力为625N,物体在20S内匀速上升5m滑轮组机械效率为80%,不计绳重和摩擦.1、绳子段数n2、总功功率3、若提升3000N的物体,滑轮组飞机械效率 从个位起,把整数的数位有顺序的排列出来 . 十位的计数单位是【 】,万位的计数单位是【】相邻两个计数单间的进率是【 】急啊啊啊啊啊! 一盏吊灯用绳挂在天花板上,天花板受到拉力的施力物体是天花板吊绳吊灯地球 用滑轮组匀速提起400牛重的物体,作用在绳子自由端的拉力需125牛,拉力做功的功率为250瓦,此时滑轮组的机求 动滑轮的重 如果用这个滑轮组匀速提升900牛重物 作用在绳子上的拉力为多少 机械 挂在天花板上的物体绳子对物体的拉力来自于本身还是地球就是和物体重力平衡的那个力各楼朋友们我是说绳子本身为何有拉力为什么QQ上的人说这个拉力是万有引力? 和吊灯重力平衡的力是;A吊灯对电线的拉力B电线对天花板的拉力C电线对吊灯的拉力D天花板对电线的拉力 用滑轮匀速提升重为2000牛的物体,作用在绳子自由端的拉力大小为625牛,拉力的功率为1250瓦,滑轮组的机械公式 一物体质量为M.用绳子挂在天花板上,当以六分之一的加速度竖直加速上升时,求绳对物体的拉力? 天花板上悬挂着一只吊灯.灯绳对灯的拉力和( )是一对平衡力;灯对灯绳的拉力和( )是一对相互作用力 高中物理需平衡摩擦力的实验有哪些 要全! 一物体用绳悬挂于天花板上处于静止它所受绳子拉力的反作用力作用在__上它所受绳子拉力的平衡力是___ 一书静止在桌面,书受到的支持力和桌子受到的压力是同时发生吗 高中物理力学实验哪些需要平衡摩擦力哪些不用?为什么? 高一物理:物体在传送带的摩擦力方向如何判断?用下两个图请具体讲解 每相邻的两个计数单位之间的进率都是10,这种计数方法叫做什么? 高中物理必修一二中哪些实验需平衡摩擦力? 【高一物理】平衡摩擦力是什么?怎么做?顺便求(3)详细过程为了验证“当质量一定时,物体的加速度与它所受的合外力成正比”.一组同学用图甲所示的装置进行实验,并将得到的实验数据 每两个相邻的计数单位之间的进率都是十,这种计数方法叫( ) 在牛顿第二定律的实验中,平衡摩擦力的作用是什么,为什么一定要平衡摩擦力,如果不,有什么影响呢,谢谢 一根绳子能承受的最大拉力是25牛,拉重700牛物体,1米每秒的速度,绳子刚好不断,若5米每秒,绳子会断吗?一根绳子能承受的最大拉力是25牛,拉重700牛的物体,以1米每秒的速度,绳子刚好不会断,若 每相邻两个计数单位之间的进率都是(),这个计数方法叫做(). 与亿相邻的计数单位是()() 与亿位相邻的数位是()位()位 与亿相邻的自然数是()和()快 一根绳子只能承受1200牛的拉力,如果用它提升浸没在水中10米深 一根绳子只能承受1200牛的拉力,如果一根绳子只能承受1200牛的拉力,如果用它提升浸没在水中10米深,重力为4500牛体积为20分米3的 什么是平衡摩擦力? 用滑轮组匀速提起400牛的中物体,作用在绳子自由端的拉力为125牛,拉力的功率为250瓦,此时滑轮组的机械效率为80%,不计摩擦和绳重求:(1)物体被匀速提升的速度这一小题答案究竟是多少? 绳子一端系在车上,另一端系在树上,绳长10米,用300牛的拉力把绳子中点向下拉0.5米绳子作用在车上力大A:3000牛B:6000牛C:300牛D:1500根3 验证牛顿第二定律改变小车质量后为什么不重新平衡摩擦力?改变小车质量后小车所售摩擦力会改变而此时为什么不重新平衡摩擦力? 重为G的物体被手抵在墙上,受墙的摩擦力是否为G?那难道不受手的摩擦力吗,那物体岂不不平衡? 用动滑轮提升重物,重物的质量是50千克,绳子自由端在300牛的拉力F作用下以0.2米/秒的速度沿竖直方向匀速上升,求拉力F的功率及动滑轮的机械效率 为什么在验证牛顿第二定律时只做一次平衡摩擦力? 假如没有摩擦力 数位就是计数单位这句话是错的.哪里错了?如果要这句话正确怎么改?错在什么地方? 牛顿第二定律 如何平衡摩擦力就是先把木板垫高,然后捏.就没了?就是说我怎么知道摩擦力已经平衡了?打点计时器?弹簧测力计? 在功与速度变化关系中,不平衡摩擦力,能否利用这个实验装置探究拉力与摩擦力的合力做的功速度变化的关系标准答案是:假如不平衡摩擦力,那么当拉力与摩擦力的合力为零时,小车的位置不 探究加速度与力,质量的关系的实验中,需要平衡摩擦力,平衡摩擦力时应该使小车1.挂上钩码,拖上纸带2.不挂钩码,拖上纸带3.不挂钩码,不拖纸带4.挂上钩码,不拖纸带 验证牛顿第二定律,平衡摩擦力后长木板位置不能移动,为什么呢? 高中物理实验探究加速度与力和质量的关系时为什么要平衡摩擦力?重点说下目的,不平衡摩擦力会怎样. 实验探究加速度与力,质量的关系中:木板倾角过大是平衡摩擦力过大,还是平衡摩擦力不足还有平衡摩擦力过大过小的图像是什么, 一本书静止与水平桌面上,书受到()力的作用.()和()是一对平衡力,()和()是作用和反作用力 假如没有了摩擦力鬼画符鬼画符鬼画符后 当做探究加速度与力.质量的关系平衡摩擦力时.斜面倾角偏大的a-f图像以a为纵坐标.以F为横坐标.图象是一条倾斜直线.但倾角偏大.所以不过坐标原点.而是在纵轴上有一段截矩这是为什么? 力学:桌面对静止放在桌面上的木块的支持力与什么是平衡力?又与什么是作用反作用力?桌面对木 选择题;把数字写在某一【】上,它才表示一定的数值.A记数单位,B位数C数位 在牛顿第二定律的实验中,如果平衡摩擦力过大或过小,则f与1/m的图像怎么画 一本物理书静止放在水平桌面上,桌面对书有支持力.与该支持力相平衡的力是 与该支持力是相互作用的力是如何辨别相互作用力和平衡力能给出力的示意图么??不懂两个力的作用点分别 个十百千万······是( )a计数法b数位名称c计数单位( 用AC和BC吊起一重物,绳与竖直方向夹角分别为30度和60度,AC绳能承受的最大的拉力是150牛而BC能承受的最大的拉力是100牛,求物体最大重力不能超过多少? 刚体力学一个比较有难度的题目一刚体细棒,长为L,质量为M,水平放置在光滑水平面上.水平面上有一垂直于平面的钉子,穿过细棒上一光滑的小孔.现在棒的一段给予一冲击(作用时间很短),如 将物体用绳子吊在天花板上,绳所受物体的弹力方向是什么?是竖直向上,竖直向下还是指向绳子收缩方向?注意:是绳子受物体,不是物体受绳子… 绳AC,BC吊一重100N的物体,AC,BC与竖直方向夹角为30度与45度,求AC,AB对物体拉力 问一题关于大物刚体力学的问题 某人用25牛的力拉滑轮组的绳子移动4米,而总重为80牛的物体只升高1米,则滑轮组的机械效率为多少如果是对的,没有过程也行 将物体用绳吊在天花板上,绳受物体给的弹力方向是向上的怎么看弹力的方向就高手解答? 用两根绳吊起100牛的重物,两绳与竖直方向的夹角一个是60度一个是30度..求出每根绳子上的拉力 用滑轮组匀速提升重2000N的物体,作用在绳子自由端的拉力大小为625N,拉力做功为12500J,滑轮组的机械效率为80%,不计轮与转轴之间的摩擦和绳重.(1)求物体上升的高度;(2)如果使用这个滑 弹力的方向从施力物体指向受力物体,比如天花板上吊个物体对绳子的拉力就不否和这种说法 悬挂在天花板下重60N的小球,在均匀水平风力作用下偏离竖直方向30度角,求风对小球的作用力和绳子的拉力
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn