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 表的。delphi客户服务器应用开发四(编辑修改稿)
相关推荐
数据库应用程序的开发步骤 数据库应用程序的最终目标就是为用户提供一个满足其长期需要的软件产品,因此,成功地开发一个数据库应用程序的关键之一是要详细地定义用户的需求,然后再围绕用户的需求进行开发,数据库应用程序的一般开发的三个基本步骤如下。 ● 系统设计 ● 系统实现 ● 系统运行和维护 在这个三个基本步骤中,都包含着数据库的开发和应用程序界面的开发两大类任务,对 于一个客户 /服务器模式的应用
和部件 主 要 用 途 ────────────────────────────────────── Data Access Components 访问数据库、数据库表、存贮过程等 ────────────────────────────────────── Data Control Components 与用户交互,提供显示、修改数据库中数据的界面
为准)。 熔好的样品冷却 3~4 分钟后,放入 600ml干杯中,用 500ml 容量瓶定量加入 500ml浸出液(浸出液为每 500ml 中含 HCl(1+1)25ml 的二次水),加搅拌边在超声波上浸出样品,样品浸出完全后供测定常规八元素用。 六、高精度微量自动加液器的操作: 加液管道始终用浸泡液充满; 试剂和样品的自动加液量: 测定元素 Ca Fe Mg Ti Al Si 一窗自动加试剂
exercise。 the state remaining in the meantime exposed to all the dangers of invasion from without, and convulsions within. He has endeavored to prevent the population of these states。 for that
3 使用 DOP 宏的通信指令。 宏是 DOP 的一大特色,通信指令可以很方便的连接其它的非标控制器。 三 通讯实例 1 例 :客户第一次使用 DOP,用一台 A57GSTD 与一台西门子 S7200 连接 连接方式: DOP 已经集成了西门子 S7200 系列的 PPI 协议,用于只需做 2 个步骤就可以完成通讯。 Step1 按照说明书做一条通讯电缆。 如图: Step2 在
.系统登录界面设计: 界面元素: 名称: 用途: Label 用户登录 Label 用户 Label 密码 Command 确定 Command 退出 Textbox Textbox 代码设计: Private Sub Command1_Click() 39。 =================================================== 39。