在多层中如何修改多个表 比较麻烦,因为要自己控制事务。可以在其中一个表的BeforeUpdate事件中先更新其余的表并捕捉错误。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法一: 让多个表是 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 中处理更新... 这样的查询如何改成准确查询 这个insert语句到底哪错了? 问题,关于线程销毁? 关于串口的问题 关于画布与panel的问题? form2.edit2.text:=form1.edit1.text //这种方法是不是妥当 急,请问如何使用ADO通过INTERNET网连接SQL数据库,我写的程序对吗? 各位指教!我用htmlhelpworkshop工具制作帮助文件中,索引号怎么创建啊?急! 请教让程序快速启动的方法? 分多,delphi网络编程高手请进 delphi可以做扑克程序吗? PcAnywhere的实时监控机制是怎样实现的?
要注意的是不能用 AsXXX 取得数据, 而只能用 OldValue 和 NewValue 取得, 因为这里的 DeltaDS 只是 ClientDataSet 中的 Delta, NewValue 为空的就是没有修改的字段
缺点是 ADOCommand 语句不像自动生成的语句, 可以有改动时才更新, 需要说明的一种情况是 XXX 字段没有改动, 所以填入的是 OldValue, 但这时有其它用户更新了这个字段的值, 这时会以后改的为准,这个字段更新为取得数据时的值。这种问题在当 UpdateMode 为 WhereKey 和 WhereChanged 时很常遇到,唯一的方法就是生成更新的语句,而不是静态,这时就觉得 Borland 把 TSQLResover 公开给开发者用有多好啊第三种方法(只适用 ADO) 把 TDataSetProvider 的 ResolveToDataSet 设为 True, 让ADO去决定更新的表, 但好像在效率上令人不是很满意。当然也要控制事务, 在 AfterUpdate 中处理更新...