15.6.2.3 删除字段部件
用字段编辑器Fields Editor为数据集部件创建好的字段部件都会显示在字段编辑器的Fields列表框中,如果用户认为其中的一些字段部件不合适或不再需要时,可以单击这些不需要的字段部件,然后单击鼠标右键弹出一佣弹出式菜单,从弹出式菜单中选择Delete菜单项,便可删除相应的字段部件,如果在弹出式菜单中单击Select All菜单项,然后选择Delete菜单项,这样会删除已创建好的所有的字段部件。某一个字段部件被删除以后,通过单击Add Fields菜单项可以重新创建,只是先前为该字段部件设定的一些属性将不复存在。
15.6.2.4 定义新的字段部件
字段编辑器Fields Editor中的弹出式菜单中New Fields菜单项是用来为数据集部件TTable或TQuery创建用于显示目的的新的字段部件,我们可以用它来为数据库表中实际存在的字段创建新的字段部件(如改变字段的数据类型,使它的字段值被显示时不再需有关的类型转换),但是我们使用New Fields菜单项创建新的字段部件主要是创建计算字段。计算字段并不与数据库表中实际存在的字段对应,它的字段值是根据表中其它的字段值计算而来的,具体的计算表达式由用户为TTable部件或TQuery部件的OnCalCFields事件编写程序代码时决定。
定义(创建)计算字段的过程如下:
1.单击字段编辑器中的New Fields菜单项,定义字段对话框如图15.11所示。
2.在FieldName编辑框中输入新字段部件的名字,或者从下拉式列表框中选择一个已存在的字段部件的名字。
3.在FieldType列表框中为新字段部件选择一个字段类型。
4.单击Calculated检查框,确认定义的新字段部件是计算字段。
5.单击ok按钮,创建上述定义的计算字段部件,此时该字段部件的名字会自动地加入到字段编辑中的Fields列表框中。
创建新的计算字段
新的计算字段创建好了之后,它是没有任何字段值的,我们必须要编写相应的程序代码,根据数据库表中实际存在的字段的字段值为计算字段的宝定义字段值,我们为计算字段所在数据集部件的OnCalcFields事件编写代码来为计算字段赋值,其步骤如下:
1.选择数据集部件TTable或TQuery
2.单击数据集部件的事件页
3.双击OnCalcFields事件为TTable或TQuery部件编写事件处理过程
15.7 TReport部件及其应用
在一般的数据库应用程序中都包含着为最终用户提供输出报表的功能,使用Delphi开发数据库应用程序时,可以使用一个叫TReport的部件来执行报表功能的,报表的具体格式和内容是由Delphi提供的一个专用报表生成工具ReprotSmith创建的,它报表的具体格式和内容生成一个报表文件,然后为TReport部件设置相应的属性参数,由TReport部件执行报表功能。
我们可以在设计阶段双击TReport部件,调用ReportSimith工具或者在Delphi程序组内双击ReportSmith图标来调用ReportSmith工具来创建一个报表文件,具体的操作步骤和设计方法请参看ReportSimth工具的使用说明。
我们在使用TReport部件执行报表功能时,要设置TReport部件的一些的一些属性,这些属性是:
ReportName属性:说明报表文件的名字,就是用ReportSmith创建的报表文件。
ReportDir属性:说明报表文件所在的途径名。
PreView属性:这是一个布尔型属性。若它的值为True,那么在执行报表功能时,只是在屏幕上显示报表;若它的值为False,则报表内容将在缺省的打印机打印出来。
AutoUnload属性:布尔型属性,它的值为True时,在执行完一个报表功能后,自动地从内存中卸出ReportSmith工具;它的值为False时,在运行完一个报表功能后,不从内存中卸出ReportSmith工具。一般情况下,如果应用程序只有一个报表或者只有较少的报表要输出时,应设置AutoUnload属性为True,如果应用程序一次要输出多个报表,那么要应设置AutoUnload属性为False。
InitialValues属性:这是一个字符串类型的属性,它是说明报表文件中使用的变量,每一条说明一个变量。如:
ReportVAR := Value;
要详细了解创建和使用报表变量的过程请参看创建报表一节。
TReport部件要真正执行报表功能以输出一个报表需要调用Run方法。如下所示:
Report1.Run;
TReport部件所具有的重要方法如表15.10所示。
表15.10 TReport部件的方法
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
方法 功 能
────────────────────────────
Run 执行报表功能,输出报表
RunMacro 发送一个宏命令给Reportimith工具
Connect 预先连接报表文件和数据库,在输出报表时不
需要登录到数据库
SetVariable 改变说明的报表变量
ReCalcReport 当报表变量改变以后,重新输出报表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
还有一些其他的数据访问部件如TBatchMove部件,它主要用在两个数据库表之间移动或拷贝帆数据记录,具体的使用请参看本地SQL服务器的使用。
15.8 应用举例:多个窗体显示同一个数据库表
在应用当中,我们常常需要以不同的视图显示同一个数据库表中的内容,例如要在两窗体中同时显示一个数据库表中一个记录的不同字段时,我们必须要想办法使两个窗体中的数据浏览部件同步地显示数据库表中的同一条记录的不同字段的值。要想做到以不同的视图显示同一个数据库表中的记录,下面两条规则是很重要的:
● 多个TDataSource部件能够同时访问同一个数据集部件
● 在多个窗体中显示同一个表时,必须为每个窗体设置一个TDataSource部件,只须为其中的一个窗体设置一个TTable部件
例如,如果想在窗体Form1和Form2中同时显示一个数据库表的记录,最简单可行的办法是:为Form1和Form2各设置一个TDataSource部件叫DataSource1、DataSource2,并在Form1中设置一个TTable部件Table1,连接Form1中的Datasource1和Table1,在程序运行过程中设置Form2中的DataSource2的DataSet属性为Form1中的Table1,代码如下:
Format2.DataSource1.Dataset := Form1.Table1;
这样,当Table1被打开时,两个窗体中便可以同步地显示数据库表中的同一条记录了。
一个名叫TWOForms.DPR的例子在C:\Delphi\DEMos\DB\TwoForms中(如果Delphi安装在其它的磁盘驱动器中,从相应的磁盘驱动器中可以找到该例子),它演示了在两个窗体中显示同一个数据库表的记录。应用程序在第一个窗体中打开Contry.DB表,并在窗体中显示Name、Captial和Continent字段,在第二个窗体中显示Area和Population字段,在第一个窗体中有一个按钮用于打开第二个窗体,两个窗体中都有TDBNavigator部件,用于记录的导航。