2

我们使用 PowerBuilder 6.0(Ingres 作为后端)开发了应用程序。应用程序代码自 2009 年以来从未更新过。但是突然它开始显示更新错误。用户在尝试保存数据时收到错误消息,例如“检索和更新之间的行更改”。我们已经确认,在用户尝试保存的过程中,任何人都没有更改数据库下的原始数据。

应用程序显示以下错误消息。

错误信息

更新失败。

数据库错误:-3:检索和更新之间的行已更改。

没有对数据库进行任何更改。

更新 os_sec1 设置 encrpt_pw='XXXXX' WHERE user_id ='Q0001' 和 USER_DEC = 'Mayur Patel_ _ __ _ __ _ __' 和 last_pw_change = {ts'2012-03-12 13:27:28'}

我们刚刚注意到更新语句的原因有错误的值。[用户描述] 字段显示带有额外空间的值。我们发现 [User Decs] 字段的长度为 40 个字符,更新语句显示总共 40 个字符(值 + 空格)。我们不知道应用程序是如何开始考虑额外空间的。

其他令人惊讶的部分是,对于某些用户的应用程序正在运行,而对于其他用户则显示错误。此外,所有用户都在使用 Window 7。

任何人都知道可能是什么原因?感谢所有输入。

4

2 回答 2

1

感谢您的所有帮助。最后问题得到了解决。根本原因是客户端和服务器的时区不同。Ingres 服务器显示 2013 年 3 月 10 日为夏令时开始时间,但客户端计算机的 Ingres 客户端显示 2013 年 4 月 7 日为夏令时开始时间。这种差异导致了所有问题。(使用 iizck 工具检查服务器和客户端的时区。)

现在,我必须与 Ingres 核对,看看他们是否有适用于 32 位和 64 位系统的补丁。作为一种解决方法,我在用户机器上安装了 Ingres 9.2 客户端。(请注意使用已安装 Ingres 2.6 客户端)

于 2013-03-14T19:58:52.827 回答
0

如您所知,“检索和更新之间的行已更改”意味着当 PowerBuilder 去更新行时,它检测到现在数据库中的内容与检索到的不同。如果您确定数据确实没有被其他人更改,那么我将开始查看数据库驱动程序设置。数据库驱动程序具有去除多余空间或将它们留在那里的设置。如果设置发生了变化,它可以解释额外的空格。此外,如果仅在某些用户计算机上更改了设置,这可能会解释为什么只有一些计算机受到影响。

于 2013-03-13T13:32:18.803 回答