- - PR -
削除と更新を行ったデータセットの更新
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-08 17:42
VB.NET2003 WindowsアプリケーションにてMDBに接続し、データセットを取得してこれを更新する際にうまくいきません。
DataAdaptorを使用し、1つのテーブルのデータをすべてデータセットのテーブルに取得します。 SQLコマンドはデザインビューでDataAdaptor作成のときに自動で作られるものをそのまま使用しています。 ID(主キー) 1 AAA 2 BBB 3 CCC このようなテーブルであったときに、まず3行目を削除し、1行目のIDを"CCC"に変更してこのデータセットを更新しようとすると、「インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。」となり更新ができません。 例えば、1行目を削除し、3行目のIDを「AAA」に変更してデータセットを更新すると、これは成功します。 更新直前の各行のRowStatusを調べると、 1 Modified 2 Unchanged 3 Deleted では失敗し、 1 Deleted 2 Unchanged 3 Modified では成功します。 DataAdapterが1行目の更新をする際に、まだ3行目が削除されておらず、主キーフィールドの値がだぶってしまうために失敗するのではと予想したのですが、どのように対処したらよいのかがわかりません。 このようなデータセットを更新するにはどうしたらよいのでしょうか。 よろしくお願いいたします。 | ||||
|
投稿日時: 2005-09-08 18:15
どもです。がると申します。
質問に対する回答ではなくて恐縮ですが。
えっと取り合えず「主キーを変更するのはやめましょう」。 理由は…取り合えず調べてみてください、ハイ。 | ||||
|
投稿日時: 2005-09-08 18:35
水谷です。
Shirathaiさんの予想通り、1行ずつ順序に処理されるため PrimaryKey 違反が発生してしまいます。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconupdatingdatabasewithdataadapterdataset.asp ここの一番下に「挿入、更新、削除の順序」という項目がありますので、参考にしてみてはいかがでしょうか。 | ||||
|
投稿日時: 2005-09-08 19:45
がるがる様、水谷様、ありがとうございました。
がるがるさんのご指摘の通り、主キーフィールドの変更はするべきでないのはわかるのですが、どうしても避けられませんでした。(ご助言いただいた後に、変更の機能はなくすことを提案してもみたのですが) 頻繁に今回のような操作が行われるわけではなく、特殊な場合なのですが、変更はできるようにする、と決まりました。 水谷さんの教えてくださったURLがまさに求めていたもので、削除行→更新行の順番でUpdateメソッドを実行することで更新することができました。 ありがとうございました。 どんぴしゃの情報があるのに探せなかったのが情けないです。 MSDNから掘り出す技術も付けなくては... |
1