我的query缓存更新有问题!(100分)

  • 主题发起人 主题发起人 vmao
  • 开始时间 开始时间
V

vmao

Unregistered / Unconfirmed
GUEST, unregistred user!
以前一直没有怀疑过query的缓存更新!直到最近碰到一个问题!
我做了一个小试验即使基本不写什么代码也要出错!不知道是什么原因!
具体做法是这样的!
控件:tquery+tupdatesql+tdatasource+tdbgrid各一个!把它们接好以后!
设置query为cacheupdate;用updatesql来更新后台! where 条件只有aa一个字段;
一个tbutton控件:
onclick事件写 query1.applyupdates;query1.commitupdates;
数据库sql server 表aaa
字段:aa bb cc 其中aa是主键;

操作过程是这样的:
1.先在dbgrid1中增加两条记录(直接在表格中输入):
如:11,11,11
22,22,22
2.点击button1执行applyupdates和commitupdates;这时数据被写到后台!不出错!
3.立即修改刚刚提交的两条记录;如:改cc字段11改33,22改44,将改过的33再改回11(两条记录间折腾一下)
没有编辑key字段,点击button1提交数据就出错了:“键值重复”
我用监视器跟踪了一下!我编辑的数据被delphi认为是增加的记录执行了insert语句!delphi没缓过神来!(认为我在insert)
我实在想不通为什么会出现这种情况!
如果我只增加一条记录无论怎么编辑都不出错!如果我增加的两条记录中只修改一条也不出错!(但一反复两条修改就出错了!)

当然如果我把11记录删掉再添加一条同样的记录(key同),这种情况就更出错了!
以上是我遇到的缓存更新的两个问题

 
快帮帮我呀!
 
没有人看到这个问题吗?
 
有人说是borland的bug?还有人有别的说法吗??
 
试一试 Database1.ApplyUpdates([query1]);
 
vmao,我也遇到了同样的问题。我想要是可以的话,还是用TTable类的控件吧,这个没问题
 
vmao,要是你把这个问题解决了,别忘了告诉我啊
 
这个不是因为缓存的问题,因为缓存照样是两条SQL语句提交数据,所以必然产生这个问题。
没有办法解决的。
 
就是说,至少有一个时刻,数据库存在了相同主键的两条记录,这样就不行了。
 
分析一下数据,这个bug也是应该的
 
接受答案了.
 
后退
顶部