我们使用PowerBuilder 6.0开发应用程序(Ingres作为后端)。自2009年以来,应用程序代码从未更新过。但是突然它开始显示更新错误。在尝试保存数据时,用户会收到错误消息,例如“检索和更新之间的行更改”。我们已经确认,在用户尝试保存期间,任何人都不会在数据库下更改原始数据。
应用程序显示以下错误消息。
错误消息
更新失败。
数据库错误:-3:检索和更新之间的行已更改。
未对数据库进行任何更改。
更新os_sec1 set encrpt_pw ='XXXXX'WHERERE user_id ='Q0001'和USER_DEC ='Mayur Patel_ _ __ _ __ _ __'和last_pw_change = {ts'2012-03-12 13:27:28'}
我们刚注意到update语句的原因是错误的值。 [用户描述]字段显示具有额外空间的值。我们发现[User Decs]字段有40个字符长度和更新语句显示总共40个字符(值+空格)。我们不知道应用程序如何开始考虑额外的空间。
其他令人惊讶的部分是,对于某些用户应用程序正在工作,而对于其他用户则显示错误。此外,所有用户都在使用Window 7.
任何人都知道可能是什么原因?感谢所有输入。
答案 0 :(得分:0)
如您所知"行在检索和更新之间进行了更改"意味着当PowerBuilder更新行时,它检测到数据库中现在的内容与检索的内容不同。如果您确定数据确实没有被其他人更改,那么我就开始查看数据库驱动程序设置。数据库驱动程序具有用于去除额外空间或将其留在那里的设置。如果设置已更改,则可以解释额外的空间。此外,如果仅在某些用户计算机上更改了这些设置,这可能会解释为什么只有部分受影响。
答案 1 :(得分:0)
感谢您的帮助。最后问题得到了修复。根本原因是客户端和服务器的不同时区。 Ingres服务器显示2013年3月10日作为日间节能开始时间但客户机器的Ingres客户端显示为2013年4月7日作为日间节能开始时间。这种差异导致了所有问题。 (使用iizck工具检查服务器和客户端上的时区。)
现在,我必须检查Ingres,看看他们是否有适用于32位和64位系统的补丁。作为解决方法,我在用户计算机上安装了Ingres 9.2客户端。 (请注意使用安装了Ingres 2.6客户端)