用ClientDataset的Delta属性手工生成SQL?(200分)

  • 主题发起人 主题发起人 高小五
  • 开始时间 开始时间

高小五

Unregistered / Unconfirmed
GUEST, unregistred user!
各位兄台:
谁用过ClientDataset的Delta属性手工生成SQL?我这里遇到的问题是:
ClientDataSet.ApplyUpdate时,因为表有主键,由于数据在增、删,导致系统自动生成的SQL的update、delete、insert按顺序执行时,会出现主键冲突的问题,我想用Delta手工生成SQL,然后将执行顺序修改成delete,update,insert,这样就可解决主键的问题,不知各位大侠有无建议或源码?
 
规划一下数据库
 
方法一:数据库的主键可以自己设计,自己生成每一条记录的主键,然后在服务端的provider里面选择updateflag为keyonly并且设定一个表的主键值就可以了,
方法二:同意自己编写sql语句,不过应该放之在应用服务器里面,在provider的beforupdaterecord事件里面可以获得更新的记录也就是delta的内容,然后根据响应的操作标志拼写实际的sql语句,而不让provider执行就可以了。
 
多谢djwdz和kxgkxg,最后我放弃了生成SQL的算法,改成多次ApplyUpdate,类似
while clientDataset1.ChangeCount > 0do
begin
clientDataset1.ApplyUpdate(-1) ;
//再加一些防止死循环的代码
end;
因为每次总能提交几条,delta中的数据越来越少,直到全部提交
 
你的这种实现方法会有问题,我们现在是自己把delta拼成sql.挺好
 
后退
顶部