access数据库新建记录时索引重复的问题

昨天晚上帮朋友修复论坛,他的论坛本来是SQL的动易论坛,后来为了将新增加的BLOG(ACCESS数据库)整合在一起,他使用了恒浪整合程序做了整合,但是出现了论坛用户不能发短信的问题,而且首页上面的在线人数也是超级多(最高在线600多人呵呵),他说以前没有出现这样的情况,是整合以后出现的,应该是错误数据,不可能有这么多。

先看发短信的问题,我注册了两个帐号互发短信,填写好以后点发送,就出现了“主索引数据重复错误”的结果,不能发短信。

我把他的数据库下载下来看,500多M啊,下了一个多小时。打开保存短信的表看了下,最后一条成功发送短信的记录是在他整合论坛的前一天,因此应该是整合的问题造成的故障。

我首先想到是不是恒浪的整合程序有问题,造成论坛程序错误。因此检查了发送短信的程序代码,没找到错误。又用修改流程代码调试程序的方法来追踪问题,找到返回结果出错的地方,是insert语句插入记录的时候出的问题,应该还是跟数据库有关系。再看数据库,Dv_Message表的ID字段编号已经达到10万多,这个字段还是表的无重复索引主键。我在access中试着新增加一条记录,结果马上弹出对话框说索引重复,跟发送短信的时候一样。看来是这个表的ID字段有问题,它是自动编号的,但是在新增加记录的时候,新记录的自动编号却小于最后一条记录的编号,跟前面的某一条记录重复了,因此出错。

找到问题了,怎么解决呢?要么清空这个表里的所有数据,新增加的记录编号就不会出现重复了。但是这样会丢失论坛上的所有短信,我朋友不能接受。我只好在access中找这个自动编号是以什么为基础的,为什么会不依照最后一条记录的编号为依据来递增?我对access的原理还不是很清楚,因此找了半天没结果。

我在翻看access时无意中我发现刚才我尝试新增记录失败后,再增加记录的时候,索引字段ID的自动编号从下一个数字继承了,就是说,我尝试增加记录的时候,自动编号109033与前面的记录重复,增加记录失败,然后再增加一次,这个时候自动编号就是109034了,虽然这个编号仍然与前面的记录有重复,增加记录失败,但是它自己递增了。哈哈,我看到了希望,虽然我增加记录不成功,但是增加记录失败也可以让自动编号递增,多失败几次,只要自动编号递增到最后一条记录的ID之后,就不会再出现重复索引了,增加记录就会成功。

于是,今天早上,我告诉朋友,你的论坛虽然现在发短信失败,但是如果你肯重复发56次失败的短信,第57次短信就肯定能成功了,呵呵。(但是论坛数据库的ID字段最后一条记录是109089,我新增加的第一条记录ID的自动编号是109033)

他将信将疑:“这么强??!”不修改程序,不修改数据库,不损失数据,就只需要发56次失败的短信,就能修复这个问题,呵呵。他说他试试看。

今天下午,他在QQ上说他发了30多次失败的短信,我也帮他发了十几次。呵呵,有点像两个傻瓜,失败了还发。结果是,下午4点他的论坛短信恢复正常。

……

现在我在思考为什么会出现这样的问题,最大的可能是整合论坛的时候,将SQL数据库转换成ACCESS数据库的时候出的问题,有可能SQL与ACCESS的自动编号不一样。

再看在线人数混乱的问题,打开online表,里面乱糟糟的记录很多,无法删除,统计人数的时候自然把这些没法删除的记录也统计进去了。呵呵,这个我见过(我维护我自己单位论坛的时候出现过),典型的就是上传论坛数据库的时候,没有关闭论坛,论坛上有人在线,这个时候在上传过程中文件没传完,却有online表的数据读写,因此造成错误。

解决办法就是清空online表,这是非用户数据,可以删除。然后新增加的记录就可以正常地被程序删除了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值