2

PowerBuilder 6.0 (バックエンドとして Ingres) を使用して開発されたアプリケーションがあります。アプリケーション コードは 2009 年以来更新されていませんでしたが、突然更新エラーが表示されるようになりました。データを保存しようとすると、「 Row Changes between retrieve and update 」のようなエラー メッセージが表示されます。ユーザーが保存しようとしている間、元のデータがデータベースの下で変更されていないことを確認しています。

アプリケーションに次のエラー メッセージが表示されます。

エラーメッセージ

アップデートに失敗しました。

データベース エラー: -3: 取得と更新の間で行が変更されました。

データベースに変更はありません。

Update os_sec1 set encrpt_pw='XXXXX' WHERE user_id ='Q0001 ' and USER_DEC = 'Mayur Patel_ _ __ _ __ _ __' and last_pw_change = {ts'2012-03-12 13:27:28'}

update ステートメントの where cause の値が間違っていることに気付きました。[User Desc] フィールドに余分なスペースがある値が表示されます。[User Decs] フィールドの長さは 40 文字であり、update ステートメントは合計 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 に答える