数据库出错信息屏蔽,如何得到ADO 出错的ID号 (100分)

  • 主题发起人 主题发起人 cxx1997
  • 开始时间 开始时间
C

cxx1997

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL2000中文版+ADO+DELPHI 6.0
在DBGrID中修改数据时,利用触发器同时修改了多条记录,在SQL SERVER中修改无问题.
在程序中修改时报错 :键列信息不足或不正确,修改影响到多条记录.
请问这种错误是什么原因,是谁发的?(DELPHI,ADO,SQL,ODBC???)
没有出错序列号.(如何得到?MSDN上说有的.)
如何屏蔽?另外,我使用时(修改),经常遇到 无法为行集定位:一些值可能在最后读取后改变
同样请问该错误的原因!
 
可以检查是不是表之间的关联出的问题,可以考虑是否能用异常处理来避免错误提示,
不过为了保证数据正确还是研究研究错误的根源吧,:)
 
该不会没有关键字吧?
 
是Delphi报的错误
DataSet靠原有的数据值来定位你要修改的记录
如果被人用触发器或存储过程改变了,就会报无法定位记录的错误。
 
我也遇到过这种问题!
 
我见过这个错误,当时是由于数据库中有重记录。可以建一个自增字段来解决。
 
主要是因为没有主关键字的原因。
 
AS
SET NOCOUNT On
SET ANSI_WARNINGS on
----把所有的脚本放在中间
SET NOCOUNT Off
SET ANSI_WARNINGS off

这样作肯定就没有问题了。
嘿嘿,多少分呀? :)


 
tinyint:出错屏蔽的问题,我已经解决了,不过不是你的方法,不过还是谢谢你,会给你分的.
现在的问题是:如何得到ADO 出错的ID号!我只能得到出错的描述!
 
用adoconnection1.Errors.Item[0].NativeError来得到
 
看看李维那本关于ado的书吧,上面讲得很详细
 
这是因为你读出某条记录后,该记录又被别的 用户修改了,这样你修改的记录
存入数据库时,就不能定位了,该记录已被修改了,因此出现那样的错误,
应该时数据库的问题。你在修改记录时最好使用数据库的事务管理,把
该记录锁定,这样应该就不会出问题了
 
book523:
我确实修改了数据,但是另一张表的,与ADO无关呀
不过出错信息确实如你所说,不能定位,但是ADODATASET无法定位呢,还是数据库无法定位?
还是DELPHI的ADO控件无法定位???
 
是数据库的问题,
你修改的是另一张表的记录,那肯定是你的触发器修改了该表的内容,
然后要存库时发生无法定位的情况。
 
ADO实现上提供了一个处理错误的对象接口,你可以看一下有没有你想要的。
Adoconnectoin1.Errors.??
 
错误号不清楚,但使用on Exception do可以获得错误信息
 
zlj555,myboy123:我现在确实就是这样作的.
 
多人接受答案了。
 
try
Dataset.open;
except
on E:exception do
begin
showmessage(E.Message+Inttostr(ADOConnection1.Errors.Item[0].NativeError));
end
end;
 
感谢hbezwwl,
遇到更新方面的问题
苦恼了几天,没办法到DFW转转,
你的话提醒了我,果然是没主关键字的原因,

谢谢^_^
 

Similar threads

后退
顶部