使用ADO,在删除一个记录时出错,“缺少更新或刷新的键列信息”(50分)

  • 主题发起人 主题发起人 ypluo
  • 开始时间 开始时间
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
ADO进行多表查询单表更新,在删除条记录时,其中有一个查询
没有问题,而另外有一个查询第一次删除出错,信息为:缺少更新或刷新的键列信息,而第二次
第三次...又正常,不知为何?
具体设置如下:
adoquery.commandtext:='select a.*,b.kh_mc from xs a,kh b where a.kh_dm=b.kh_dm'//视图
adoquery.loctype=BatchOptimistic
adoquery.CursorType=KeySet
adoquery.CursorLocation=clUseClient

adoquery.delete;
adoquery.UpdateBatch;//出错语句。
表中已经设了主键,
 
每次写ADO的查询语句最好用CLEAR属性清除一下参数和SQL语句再试试
 
装上ADO的UPDATE吧
 
adoquery.disablecontrol;
....
adoquery.enablecontrol;
 
你的数据库中表的主键或带索引的字段中的数据有重复数据,所以删除时出错。
写数据时要保证唯一性即可解决
 
你的数据库中有重数据,因为你用的是缓存更新模式,所以你设置了主键,
但是在缓存里可能有重数据,所以删除时出错。
 
楼上的同志们说得不对,请你们负责任地试试就知道了。
这个问题的一要原因是由于ADO自动处理从多个表JOIN在一起的数据造成的。
你的数据因为是从两个表来的,所以ADO会从两个表中删除数据,导致错误信息。
对这种情况我目前使用两种方法来解决:
Method1: 先获得目前这条记录的关键信息,根据关键信息另外使用SQL语句从原表中删除,
虽然麻烦,但是适用面广。
Method2: 不采用JOHN的方法,而换用LOOKUP字段会更简单,但不知能否适用于你。

祝心情愉快。 vcok.
 
我的数据库中并没有重数据,

问题在于第一次出错,可第二次重试,就可以删除记录了。

我已经安装了升级程序。
to pely:你的方法仍不行。
to vock:你说的也不太对,我现在插入、修改都已经 做好了,问题是删除,
不存在你说的问题。

还有:
我试着用adocommand删除记录,但是当我在commandtext中写入:
delete kh where kh_dm="2000",执行时也出错。
 
d6 的ado update怎样装,在哪找
 
直接安装mdac2.6
 
可以设置6个UPDATESQL,分别在设置每个数据库的INSERT、DELETE、MODIFY,用adoquery、
database、进行相连,就不会出现这样的问题了
 
你还是装个officexp 吧 ADO2.5就是这样的
我以前也是那样的 装好officexp后就从没有那样了
 
而且DBGRIDEH,menu都这样,特别是menu,popupmenu,可麻烦了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
962
import
I
I
回复
0
查看
866
import
I
后退
顶部