18.4.2 应用程序分析
18.4.2.1 TDatabase部件的使用
CSDEMO程序中定义了一个数据库模块部件——TDmEmployee,它是继承于TDataModule。TDataModule是在Delphi2.0中才出现的专门放置数据访问部件(如TDatabase、TTable和TQuery等)的框架。其它涉及数据库访问的窗体,只要在uses语句中插入数据库模块所在的库单元,该窗体上的数据库部件就可引用相应的数据库访问部件。
在TDmEmployee中定义了一个TDatabase类型的部件──EmployeeDatabase。EmployeeDatagase的主要属性及属性值如下:
表18.15
EmployeeDatabase部件主要属性的取值
━━━━━━━━━━━━━━━━━━━━━━━
属性 属性值
───────────────────────
AliasName IBLOCAL
DatabaseName EmployeeDemoDB
KeepConnection True
LoginPrompt False
TransIsolation tiReadCommitted
Params USERNAME = SYSDBA
PASSWORD = masterkey
Connected True
━━━━━━━━━━━━━━━━━━━━━━━
AliasName属性所指定的IBLOCAL,必须已经在BDE中配置好,DatabaseName属性指定要使用的数据库名,该数据库名是由应用程序自己定义的,因此不反应到BDE中,该属性值被TTable、TQuery等DataSet部件引用,并且出现在DataSet部件的DatabaseName 下拉式列表框中。本例中的“EmployeeDemoDB”,被EmployeeTable,SalesTable等所有DataSet部件引用。
Connected为True表明,应用程序与数据库将保持联接。
KeepConnection属性为True,表明多次打开和关闭EmployeeDemoDB数据库中的任意表,应用程序将始终与数据库保持联接,这省却了重复注册的开销。
LoginPrompt 属性为False,表明应用程序自动处理与数据库的联接注册,因此,Params属性中定义了注册的用户名和口令:
USERNAME =
SYSDBA
PASSWORD = masterkey
TransIsolation属性为tiReadCommitted表明,如果存在多个同时事务,则某一事务只允许读由其它事务提交了的数据。
程序中EmployeeDatabase的应用还与事务控制等有关。下文中会介绍这方面的内容。
18.4.2.2 不同数据库表的切换
在许多数据库应用中都要在不同数据库表之间相互切换,以响应用户输入条件或系统状态的变化。这时,往往需要特别的处理,例如改变光标形状或隐藏数据改变等,尤其是在客户/服务器应用程序中。因为是用SQL语句访问远程数据库,有时还要在服务器端执行计算任务,所以客户端的数据变化会有一定的间隔,因此应该让用户明白发生了什么。下面是CSDEMO在数据库表切换时的处理办法:
procedure TFrmViewDemo.ShowTable( ATable: string );
begin
Screen.Cursor := crHourglass; { 向用户提示当前操作状态 }
VaryingTable.DisableControls; { 隐藏数据变化 }
VaryingTable.Active := FALSE; { 关闭原来的数据库表 }
VaryingTable.TableName := ATable; { 更新数据库表名 }
VaryingTable.Open; { 打开数据库表 }
VaryingTable.EnableControls; { 显示所作的修改 }
Screen.Cursor := crDefault; { 重新设置光标形状 }
end;
crHourglass型光标表明正在执行SQL查询。DisableControls和EnableControls的作用是隐藏和显示数据变化。
18.4.2.3 InterBase触发器(Trigger)的应用
在CSDEMO应用程序中,演示触发器应用的窗体是TFromTriggerDemo;
在该窗体中包含两个TDBGrid对象。DBGrid1显示EmployeeTable中的数据,DBGrid2显示SalaryHistoryTable中的数据。它们的主要属性及属性值如下:
表18.16
EmlpoyeeTable部件主要属性的取值
━━━━━━━━━━━━━━━━━━━━━
[1] [2] [3] [4] 下一页 |