───────────────────── DatabaseName EmployeeDemoDB
IndexFieldName Emp_No
MasterFields Emp_NoMasterSource 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 (old.salary <> new.salary) THENINSERT INTO salary_history
(emp_no, change_date, updater_id, old_salary, percent_change)
VALUES (
old.emp_no,
'now',
user,
old.salary,
(new.salary - old.salary) * 100 / old.salary);
END
因为触发器是相应于
EMPLOYEE表上的数据修改由服务器自动触发执行的,所以在客户应用程序上没有显式的调用。在客户端有打开并显示数据库表内容的程序和当SALARY_HISTORY表中数据变化时的更新显示的操作。procedure TFrmTriggerDemo.FormShow(Sender: TObject);
begin
DmEmployee.EmployeeTable.Open;
DmEmployee.SalaryHistoryTable.Open;
end;
procedure TDmEmployee.EmployeeTableAftERPost(DataSet: TDataSet);
begin
{
一个雇员的薪水变化将触发薪水调整历史记录的变化, 因此,如果SalaryHistory打开的话,就需要更新显示 }with SalaryHistoryTable do if Active then Refresh;
end;
18.4.2.4
存储过程编程
存储过程也是
SQL服务器上的一段程序,它接收输入参数,在服务器端执行,并将结果返回客户端,存储过程是必须在客户应用程序中显式调用的。对于数据库表中大量记录的统计和函数计算,存储过程是很有用,这样可以将重复性计算任务转换到服务器,提高数据库应用的性能。
Delphi中有两个部件能操作远程数据库服务器上的存储过程:TQuery和TStoredProc。
1. TQuery
的存储过程编程CSDEMO
中演示用TQuery调用存储过程的窗体是TFrmQueryProc。TFrmQueryProc中有两个TDBGrid
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




