delphi客户服务器应用开发四(编辑修改稿)内容摘要:

= masterkey TransIsolation 属性为 tiReadCommitted 表明,如果存在多个同时事务,则某一事务只允许读由其它事务提交了的数据。 程序中 EmployeeDatabase 的应用还与事务控制等有关。 下文中会介绍这方面的内容。 不同数据库表的切换 在许多数据库应用中都要在不同数据库表之间相互切换,以响应用户输入条件或系统状态的变化。 这时,往往需要特别的处理,例如改变光标形状或隐藏数据 改变等,尤其是在客户 /服务器应用程序中。 因为是用 SQL 语句访问远程数据库,有时还要在服务器端执行计算任务,所以客户端的数据变化会有一定的间隔,因此应该让用户明白发生了什么。 下面是 CSDEMO 在数据库表切换时的处理办法: procedure ( ATable: string )。 begin := crHourglass。 { 向用户提示当前操作状态 }。 { 隐藏数据变化 } := FALSE。 { 关闭原来的数据库表 } := ATable。 { 更新数据库表名 }。 { 打开数据库表 }。 { 显示所作的修改 } := crDefault。 { 重新设置光标形状 } end。 crHourglass 型光标表明正在执行 SQL 查询。 DisableControls 和EnableControls 的作用是隐藏和显示数据变化。 InterBase 触发器 (Trigger)的应用 在 CSDEMO 应用程序中,演示触发器应用的窗体是 TFromTriggerDemo; 在该窗体中包含两个 TDBGrid 对象。 DBGrid1 显示 EmployeeTable 中的数据,DBGrid2 显示 SalaryHistoryTable 中的数据。 它们的主要属性及属性值如下: 表 EmlpoyeeTable 部件主要属性的取值 ━━━━━━━━━━━━━━━━━ ━━━━ 属 性 属 性 值 ───────────────────── DatabaseName EmployeeDemoDB IndexFieldName Emp_No TableName EMPLOYEE ━━━━━━━━━━━━━━━━━━━━━ 表 SalaryHistoryTable 部件主要属性的取值 ━━━━━━━━━━━━━━━━━━━━━ 属 性 属 性 表 ───────────────────── DatabaseName EmployeeDemoDB IndexFieldName Emp_No MasterFields Emp_No MasterSource EmployeeSource TableName SALARY_HISTORY ━━━━━━━━━━━━━━━━━━━━━ 这两个表之间存在两种关系: ● 连接关系 EmployeeTable 的记录变化时, SalaryHistoryTable 的数据要作相应的变化。 这种连接关系是通过索引来实现的。 ● 数据一致性 对 EmployeeTable 中的 Salary 字段的值作修改必须反映到 SalaryHistoryTable中, SalaryHistoryTable 维护的是 Salary 变化的历史信息。 这种数据一致性要求在本程序中是通过触发器实现的。 触发器是在 SQL 服务器端执行的一段程序,它在服务器端被触发执行完成一定的数据计算任务。 下面是 InterBase 服务器上与 Employee 表相关的触发器程序: Triggers on Table EMPLOYEE: SAVE_SALARY_CHANGE, Sequence: 0, Type: AFTER UPDATE, Active AS BEGIN IF ( ) THEN INSERT INTO salary_history (emp_no, change_date, updater_id, old_salary, percent_change) VALUES ( , 39。 now39。 , user, , ( ) * 100 / )。 END 因为触发器是相应于 EMPLOYEE 表上的数据修改由服务器自动触发执行的,所以在客户应用程序上没有显式的调用。 在客户端有打开并显示数据库表内容的程序和当 SALARY_HISTORY 表中数据变化时的更新显示的操作。 procedure (Sender: TObject)。 begin。 end。 procedure (DataSet: TDataSet)。 begin { 一个雇员的薪水变化将触发薪水调整历史记录的变化 , 因此,如果 SalaryHistory 打开的话,就需要更新显示 } with SalaryHistoryTable do if Active then Refresh。 end。 存储过程编程 存储过程也是 SQL 服务器上的一段程序,它接收输入参数,在服务器端执行,并将结果返回客户端,存储过程是必须在客户应用程 序中显式调用的。 对于数据库表中大量记录的统计和函数计算,存储过程是很有用,这样可以将重复性计算任务转换到服务器,提高数据库应用的性能。 Delphi 中有两个部件能操作远程数据库服务器上的存储过程: TQuery 和TStoredProc。 1. TQuery 的存储过程编程 CSDEMO 中演示用 TQuery 调用存储过程的窗体是 TFrmQueryProc。 TFrmQueryProc 中有两个 TDBGrid 部件。 DBGrid1 显示 EmployeeTable中的数据。 DBGrid2 显示 Project 表 中的数据。 使用存储过程的 TQuery 部件名为 EmployeeProjectsQuery,它的作用是建立 Employee 表和 Project 表的。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。