键列信息不足或不正确 的问题

tuiger2003 2003-06-07 08:59:58
各位好,

我使用一个线程对一个表进行定期更新。这个表有主键,记录绝对不可能重复。线程每次更新50个数据,(更新的部分并不是主键)。但总是第一次完整执行后,隔几分钟再次处理时,头一个记录就报错。 提示键列信息不足或不正确。
1、由于我每次处理完一组数据,自动打上标记,下次只读未处理的部分。所以不可能是处理上次的数据。
2、我查过了相关的错误提问,发觉大家都写为是写了重复的键,可我可以保证地说,绝对没有重复的键。而且每次我重新运行程序,这些上次提示出错的记录在第一次运行时都可以正常更新,证明并不是重复键的问题。
我想会不会是我的线程的问题,所以请问大家, 这是什么问题,如何解决。

(说明,程序用BCB,这个线程每几分钟生成一次,执行Execute()。)

...全文
36 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuiger2003 2003-06-09
  • 打赏
  • 举报
回复
我看一下,谢谢了 :))
pengdali 2003-06-08
  • 打赏
  • 举报
回复
你有几个线程一个吗?
pengdali 2003-06-08
  • 打赏
  • 举报
回复
1、你有触发器呀
2、你最好用连接池,delphi应该有pool这个控件的
tuiger2003 2003-06-08
  • 打赏
  • 举报
回复
可以了,我每次操作前将connected先false后true,就可以了。而且处理速度非常快。

有一个见过相同错误的朋友是这样处理的,他将数据库的触发器里设成set nocount on
这样也可以不出错。我也试了,可是处理每条记录的时间长达0.3-0.4秒,太慢。
大力如果你有空,可否告诉我为什么前者速度快,而后者这么慢呢?(我用的是BCB)

先告诉你,过几个小时如果你还没回答,我也一定把分给你。
tuiger2003 2003-06-08
  • 打赏
  • 举报
回复
是的,就一个线程! 我是为了停止更新操作比较方便才设立线程的。
tuiger2003 2003-06-07
  • 打赏
  • 举报
回复
我试过了,第一次结束时我将表 close() 了,但第二次还是有问题,真是怪得很。

不会让我连connected都要先false再true吧? :(((
pengdali 2003-06-07
  • 打赏
  • 举报
回复
你重新open一次试试
tuiger2003 2003-06-07
  • 打赏
  • 举报
回复
顶 :)

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧