第十八章delphi客户服务器应用开发四内容摘要:
RNAME = SYSDBA PASSWORD = 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,它的作用是建立 Emplo。第十八章delphi客户服务器应用开发四
相关推荐
津、陕、鲁、晋、皖等地进行区域试验、生产示范,选出了早熟、优质、耐运输西瓜新杂交种‘欣大’, 2020 年 12月通过甘肃省农作物品种审定委员会审定,审定号为:甘种审字第 346号。 甘肃 甘肃省农业科学院 辣椒杂交一代新品种 —— 甘科 5号 该品种是针对西北地区的消费习惯和口感要求而选育出的皱皮长羊角型杂交一代辣椒新品种。 2020 年以自交系03L43 为母本,以
型不匹配,则要经过一定的转换才能够相互赋值。 如: := 这条代码在运行过程中将会出错,因为 TablelcustNo是 TFloatField 类型即是数值型数据,要在编辑框 Edit1 中显示数值型数据要经过下列转换: :=。 AsString 是字段对象的属性,通过字段对象的 AsString 属性可以读取字段值并且将它转换成字符串类型。 字段对象的字段值可以转换 成以下几种类型的数据 :
已由当地船检局检查,船开往上海港的整个过程中,温度一直保持在 12 度到17 度之间,机器正常没有损坏。 货损原因由于冷却器冻塞,冷气打不进冷藏舱,是管船过失所致。 根据《海牙规则》,对因船长、船员或承运人的雇佣人员在驾驶和管理船舶方面的行为疏忽所致的货 损,承运人可以免责。 所以承运人拒不承担赔偿责任。 后经查明,冻鸡变质的原因却是冷藏机的冷却器冻塞,冷气打不进,造成舱内温度过高,引起变质。
借得好,天衣无缝,效果就会更好,否则,离题万里、不着边际。 例如, 题目:不要写 错白字 ,其危害。 某人离家出差,给恋人写信落款:“我要吻你”, 其 恋人读错,向他妈说: “我男朋友变心了。 ”妈:“他不是出差了吗。 你怎么知道的。 ”女:“他来信说要杀我。 ”妈:“咋说的。 ”女: “ 他 说,见面时一定 要刎 (吻) 我”。 ⒊夸大其词 就是在关键的地方,进行恰当的、合理的、恰到好处的夸张
多数据库管理系统 (DBMS)产品都采用的数据存取语言。 SQL 允许用户在关系表数据上进行查询、建立新表、存取现有的远程表、操作数据、建立应用程序存取 SQL 数据,运行 SQL 语句,处理错误以及访问多个 服务器。 SQL 数据库服务器是多用户关系数据库管理系统 (DBMS)。 SQL 可以作为一个查询语言用于交互式使用或嵌入在应用程序中。 在执行查询时, SQL
中断系统的控制寄存器: 中断允许寄存器 IE 中断屏蔽 在中断源与 CPU 之间有一级控制,类似开关,其中第一级为一个总开关,第二级为五个分开关,由 IE 控制。 在 MCS- 51 中断系统中,中断的允许 或禁止是由片内可进行位寻址的8 位中断允许寄存器 IE 来控制的。 见下表 EA ES ET1 EX1 ET0 EX0 其中 EA 是总开关,如果它等于 0,则所有中断都不允许。