Приложение Powerbuilder выдает ошибку: строка изменена между получением и обновлением

У нас есть приложение, разработанное с использованием PowerBuilder 6.0(Ingres в качестве бэкэнда). Код приложения никогда не обновлялся с 2009 года. Однако внезапно он начинает показывать ошибку обновления. Пользователи получают сообщение об ошибке типа "Изменения строк между извлечением и обновлением" при попытке сохранить данные. Мы подтвердили, что исходные данные даже не изменяются в базе данных кем-либо при попытке пользователя сохранить данные.

Приложение показывает следующее сообщение об ошибке.

Сообщение об ошибке

Не удалось обновить.

Ошибка базы данных: -3: строка изменена между получением и обновлением.

В базу данных не внесено никаких изменений.

Обновите os_sec1 set encrpt_pw='XXXXX' WHERE user_id ='Q0001 ' и USER_DEC = 'Mayur Patel__________' и last_pw_change = {ts'2012-03-12 13:27:28'}

Мы только что заметили, что в операторе обновления указаны неправильные значения причины. Поле [User Desc] показывает значение с дополнительным пробелом. Мы выяснили, что поле [User Decs] имеет длину 40 символов и оператор обновления, показывающий всего 40 символов (значения + пустое пространство). Мы не знаем, как приложение начинает учитывать дополнительное пространство.

Другая удивительная часть заключается в том, что для некоторых пользователей приложение работает, а для других оно показывает ошибку. Также все пользователи используют Window 7.

У кого-нибудь есть идея, в чем может быть причина? Цените все входы.

2 ответа

Спасибо за вашу помощь. Наконец проблема получила решение. Основной причиной был другой часовой пояс для клиента и сервера. Сервер Ingres показывал 10 марта 2013 года как время начала перехода на летнее время, однако клиент Ingres на клиентской машине показывал 7 апреля 2013 года как время запуска перехода на летнее время. Это несоответствие вызывало все проблемы. (Использовал инструмент iizck для проверки часового пояса на сервере и клиенте.)

Теперь я должен проверить у Ingres, есть ли у них какой-либо патч для 32- и 64-битной системы. В качестве обходного пути я установил клиент Ingres 9.2 на компьютерах пользователей. (Обратите внимание на использование установленного клиента Ingres 2.6)

Как вы знаете, "строка, измененная между извлечением и обновлением" означает, что когда PowerBuilder пошел обновлять строку, он обнаружил, что то, что сейчас находится в базе данных, отличается от того, что было извлечено. Если вы уверены, что данные действительно не изменяются кем-то другим, я бы начал смотреть на настройки драйвера базы данных. Драйверы базы данных имеют настройки для удаления лишних пробелов или оставления их там. Если настройки изменились, это может объяснить дополнительные пробелы. Кроме того, если настройки были изменены только на некоторых компьютерах пользователей, это может объяснить, почему это влияет только на некоторые из них.

Другие вопросы по тегам