6

データウィンドウを更新すると、「取得と更新の間で行が変更されました」というエラーが表示されます。解決策は何ですか?

4

7 に答える 7

5

これは、複数の (共有されていない) データウィンドウに同じ行を表示し、両方を更新しようとした場合に発生する可能性があります。その他の原因は、SetItemStatus() の不適切な使用です。update() ステートメントでのステータス フラグの不適切な使用。最後に、これが検出しようとしている原因は、別のユーザーがあなたの前に行を更新したことです。

于 2010-07-07T14:15:04.313 に答える
2

これは通常、update where 句に含めた一部の列が、トリガーなどを介して別の場所で更新されていることを意味します。別の原因には、Oracle との通信時に文字列列に空の文字列が null に設定されていないことが含まれます。Oracle は、送信された空の文字列を null に変換するため、pb に null として扱うように指示しない限り、後続の更新で同じ行が検出されません。where句に含めるようにpbに指示した列( update spec 内)を見て、それらが本当に必要な列であることを確認してください。

于 2010-10-10T16:12:26.363 に答える
2

これは解決されましたか?これが発生する理由はいくつかあります。1 つは、行が別のユーザーによって更新された場合です。データオブジェクトの更新プロパティでは、キー値、キーと変更された値、またはキーとすべての更新可能な列を使用して、更新方法を選択できます。

同時実行の問題がないことが確実な場合は、この設定を「キー値のみを使用」に変更できます。更新の where 句がキー値のみで構成され、他の列は変更について評価されません。

検証エラーが発生した場合に発生する可能性があります。アイテムのステータスを未変更に設定することを忘れないでください。すべての行を未変更に設定するには、行 1 のすべての列を NotMofidied! に設定する記憶が正しければ、dw_1.setitemstatus(1,0,Primary!,NotModified!) を実行します。また、ResetUpdate() またはデータを再取得することもできます。

お役に立てれば。リッチ

于 2010-09-01T14:42:37.960 に答える
1

これは、同じデータベース行を更新する 2 つのデータウィンドウ行がある場合にも発生する可能性があります。

(あまり良くない) 例:

テーブルには主キーがありませんが、データウィンドウは DateOfBirth を使用します。

   本名:デニス・ミラー
   生年月日: 19531103
   職業:お笑い芸人
   本名:ケイト・キャプショー
   生年月日: 19531103
   職業:女優

Dennis と Kate の DateOfBirth が同じであることに注意してください。

これらの変更が行われたと仮定しましょう

   氏名:デニス・ミラー氏
   名前:ケイト・キャプショーさん

dw_1.update() が呼び出されると、次のメッセージが表示されます。

   「取得と更新の間で行が変更されました」

各行が 2 回更新されたため、最初は「Mr. デニス・ミラー」、そして「Ms. ケイト・キャプショー

于 2012-04-23T19:29:50.693 に答える