• 締切済み

データが更新されません

Access2002です。 「DVDNum」テキスト型 インデックス はい (重複あり) 「ID」長整数型 はい (重複あり) の2列で構成されているテーブル「DVDinfo」があります このデータで DVD-01 1 DVD-01 2 DVD-01 3 DVD-02 4 DVD-02 5 DVD-03 6 DVD-03 7 DVD-03 8 DVD-04 9 ・・・ (IDの列は飛び数字はありません) の状態で新規に DVD-02 6 を入れたいのです ただしIDは上記のように連番にしたいので まず先にInsert前の6以降を全部+1してから 新しいデータを挿入しようと考えました。 そのUPDATE文は UPDATE DVDinfo SET ID = ID + 1 WHERE 収録ID >= 6; としたのですが、実行しようとすると エラー「更新クエリですべてのレコードを更新できません ・・・2件のレコードでキー違反、・・・レコードを更新できませんでした」 とでます。 DVD-03 6 ・・・A DVD-03 7 ・・・B DVD-03 8 ・・・C で恐らく6が7になろうとしBと重なる、7が8になろうとしCと重なる の2件がキーに違反するって言うことだと思います。 私の目的はある値から指定した分値を増やしたいのですが この場合はSQLを直すのかデータの構造が直すのか 教えて欲しいです。 最終的に DVD-01 1 DVD-01 2 DVD-01 3 DVD-02 4 DVD-02 5 DVD-02 6 DVD-03 7 DVD-03 8 DVD-03 9 DVD-04 10 ・・・ となって欲しいのです よろしくお願いします

みんなの回答

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

やろうとしていることがデータベース的ではないですね IDというからにはこれはレコードを特定するものであり AccessのようなRDBなら他のテーブルと関係づけるために 設けられているもののはずです そのようなものをレコードが増えたからと言って振り替えるなんてのは データベース的には絶対にやってはならない操作です そうではなく単なるお飾りだというのなら テーブルには持たずにクエリなどで表示の都度振ってやればいいだけの話になりますね

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

DAO の例です。 DAO 3.6 の参照設定 が必要です Dim rst As DAO.Recordset Dim strSQL As String strSQL = "SELECT ID From テーブル名" & _ " WHERE ID >=6" & _ " ORDER BY ID DESC" Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) If rst.RecordCount > 0 Then   rst.MoveFirst   Do Until rst.EOF     rst.Edit     rst!ID = rst!ID + 1     rst.Update     rst.MoveNext   Loop End If rst.Close Set rst = Nothing のような感じですね。 >=6 や +1 の数字はフォームのテキストボックスを参照するようにするのが普通かな?

tocci_pc
質問者

お礼

御回答ありがとうございます " ORDER BY ID DESC" ですね。 やってみます

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

UPDATE DVDinfo SET ID = ID + 10000001 WHERE 収録ID >= 6; を実行してから UPDATE DVDinfo SET ID = ID - 10000000 WHERE 収録ID > 6; を実行すればよろしいのでは? 10000000 は 長整数型の範囲で、ありえない十分大きい数で。 あるいは、DAO などで 大きい順に読み、+1するかですね。

tocci_pc
質問者

お礼

>UPDATE DVDinfo SET ID = ID + 10000001 WHERE 収録ID >= 6; を実行してから UPDATE DVDinfo SET ID = ID - 10000000 WHERE 収録ID > 6; を実行すればよろしいのでは? そうですね。たしかにそんな値まではデータはたまらないですね。 >あるいは、DAO などで 大きい順に読み、+1するかですね。 そのやり方のヒントがあれば教えてください

関連するQ&A