首先﹐请先把Query1的UpdateObject属性设成UpdateDepartment﹐接着连续点选UpdateDepartment二下开启UpdateSQL的编辑器﹐你可以把DEPARTMENT资料表指定给这个组件﹐然后选出你想要Update的数据域位﹐最后点选[Generate SQL]功能按钮﹐TUpdateSQL组件将会自动帮你产生Update的SQL命令﹐只要再点选[SQL]页次﹐你就可以看到那些SQL命令。
接下来﹐请你把Query1的UpdateObject属性改成UpdateEmployee﹐然后开启UpdateEmployee的UpdateSQL编辑器重复上述的步骤﹐让UpdateEmployee可以自动产生Update用的SQL命令。建立上述两个UpdateSQL组件的目的就是为了分别Update在Query1使用到的DEPARTMENT及EMPLOYEE资料表﹐而这些动作必须依赖QUERY1产生的DataSet 来进行﹐这也是为什幺我们要把DataSet设在BDE的Cached Buffer里面。因为如此一来﹐你才能各个击破地分别把每个资料表的异动资料写回到数据库中。
当你把Query1的属性CachedUpdates设成True之后﹐任何针对Query1产生的DataSet异动的结果都会被记录在前端BDE的Cached Buffer内﹐只有执行Query1.ApplyUpdates命令时﹐这些存放在BDE Cached Buffer内的所有异动资料才会被写入数据库中。当BDE把Buffer内的异动记录一笔一笔地写到数据库时﹐每写入一笔就会去呼叫Query1的OnUpdateRecord事件程序一次﹐这时候﹐你就可以把Update每个资料表的程序写在这个事件程序内﹐如下所示﹕
procedure TDM.Query1UpdateRecord(DataSet:TDataSet; UpdateKind:TUpdateKind; var UpdateAction:TUpdateAction);
begin
//先把Employee的异动记录写回数据库内
DM.Query1.UpdateObject:=UpdateEmployee;
UpdateEmployee.SetParams(UpdateKind);
UpdateEmployee.ExecSQL(UpdateKind);
//再把Department的异动记录写回数据库内
DM.Query1.UpdateObject:=UpdateDepartment;
UpdateEmployee.SetParams(UpdateKind);
UpdateEmployee.ExecSQL(UpdateKind);
UpdateAction:=uaApplied;
end;