こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

更新時の「同時実行エラー」の対策

VB.NET2003+Access2000で開発練習中です。

今二つのテーブルにリレーションをかけて、サブフォームからデータの変更・更新をしようとしています。

新規追加は問題なくできていますが、少しデータを変更したり、削除しようとすると「同時実行エラー」が起こります。

テーブルは「メイン」と「サブ」の二つで、それぞれのテーブルにある「伝票No」がキーになっています。
(メイン伝票1枚に複数のサブ伝票がついています)

データセットは「DsDenpyou」という名前で両テーブルをセットしています。

データ更新のために

  dataadapter1.update(DsDenpyou,"メイン")
  dataadapter1.update(DsDenpyou,"サブ")

と続けて記述すると、必ずサブのテーブルを更新にいったときにエラーになります。
なにかチェックの方法がありましたらご教示いただけませんか?

なお主キーはメインのテーブルの「伝票No」に設定しており、サブには設定していません。

よろしくお願いします。

投稿日時 - 2006-05-08 13:32:20

QNo.2138357

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

DBConcurrencyExceptionオブジェクトで同時実行違反が発生する原因は取得できますでしょうか。
データセットの関連テーブルを更新する場合は適切な順番で更新して参照整合性の制約に違反しないようにする必要があります。
tryとcatchブロック内でIf・End Ifを使い"メイン"と"サブ"のUpdateメソッドを続けてではなく順に呼び出して更新エラーが起きた場合はエラーを分岐して解決してみてはどうでしょうか。
"メイン"のupdateが完了したら"サブ"のUpdateとなるように。

投稿日時 - 2006-05-09 11:44:54

補足

ありがとうございます。
切り分けようと簡単なサンプル(シンプル)データを作ってやってみているんですが、その場合は出ないんです。
メインの方は表示だけさせておいて、サブのデータを変更にいくのですが、同じデータセットに入っているために
それぞれがupdateコマンドの対象になっているのですね。
コードを見る限り、メインの方のアップデートが終わってからサブの方にいっていると思っていましたが、違っている?
メイン、サブ、またメインサブといっているのでしょうか?
とするとどの項目でエラーになるのかを捕まえなければなりませんが、データセットからどういう風にデータが書き込まれるのでしょうか?
それをtry~catch文で捕捉する場合、どういう風に記述すればいいのでしょうか?
できれば一件一件どこかに表示させてやるとわかりやすいと思うのですが、さてその方法が・・・・。
引き続きよろしくお願いします。

投稿日時 - 2006-05-10 16:19:53

あなたにオススメの質問