比较麻烦,因为要自己控制事务。
可以在其中一个表的BeforeUpdate事件中先更新其余的表并捕捉错误。

解决方案 »

  1.   

    方法一:  让多个表是 Master/Detail 关系, 那就什么事都不用做, 设置好每个字段是否要更新方法二:  在 BeforeUpdateRecord 中做些事, 每一条记录更新前都会触发 BeforeUpdateRecord 事件, 其中又可以用 UpdateKind 判断是 Insert, Modify or Delete, 然后写一条语句,比方说是 ADO, 那就用个 ADOCommand, UPDATE XXX SET XXX = :XXX WHERE KEY = :KEY, 接下来一个个参数去填写,记住这时不要控制事务, 出错时可以直接产生异常而产生客户机 ReconcileError 事件, 
      要注意的是不能用 AsXXX 取得数据, 而只能用 OldValue 和 NewValue 取得, 因为这里的 DeltaDS 只是 ClientDataSet 中的 Delta, NewValue 为空的就是没有修改的字段
      缺点是 ADOCommand 语句不像自动生成的语句, 可以有改动时才更新, 需要说明的一种情况是 XXX 字段没有改动, 所以填入的是 OldValue, 但这时有其它用户更新了这个字段的值, 这时会以后改的为准,这个字段更新为取得数据时的值。这种问题在当 UpdateMode 为 WhereKey 和 WhereChanged 时很常遇到,唯一的方法就是生成更新的语句,而不是静态,这时就觉得 Borland 把 TSQLResover 公开给开发者用有多好啊第三种方法(只适用 ADO)  把 TDataSetProvider 的 ResolveToDataSet 设为 True, 让ADO去决定更新的表, 但好像在效率上令人不是很满意。当然也要控制事务, 在 AfterUpdate 中处理更新...