• ベストアンサー

アクセスの連番について

アクセスでテーブルのkanri_Noという項目に管理番号を振りたいと思っています。 他のテーブルに後でインサートするので、そのテーブルのKanri_NOの最大値をKanri_Maxとして引いてきてそのKanri_Max+連番という風に振りたいのですが、どうSQLを入れればいいのか分かりません。 Kanri_Maxが4000だったら、4001、4002、4003・・・、Kanri_Maxが5000だったら5001、5002、5003とKanri_Noの項目に連番を振りたいのです。 連番を振る前のKanri_Noは空白です。 初心者で申し訳ないのですが教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

Kanri_NO のNOはNoなので、以下にしてください。 INSERT INTO T2 ( Kanri_No ) SELECT (SELECT (COUNT(*) + (SELECT Max(T1.Kanri_No) AS Kanri_Max FROM T1)) FROM T1 AS Temp WHERE Temp!Kanri_No<=T1!Kanri_No) AS 連番 FROM T1; たぶん、#2でも大丈夫だとは思いますが、 一応、大文字、小文字の区別があるので。

mamekomatsu
質問者

お礼

ありがとうございます。 !を . にしたら上手く行きました。助かりました!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.4

ANo.1のshinkamiです Kanri_NO のデータ型がオートナンバー型でないときは 元テーブルのフィールドにID(オートナンバー型)を主キーとして加えた 中間テーブル(ID,フィールド名1,フィールド名2,フィールド名3,…)を用意して 1.docmd.RUNSQL ("delete from 中間テーブル名") 2.docmd.RUNSQL ("insert into 中間テーブル名(フィールド名1,フィールド名2,フィールド名3,…) select 項目名1,""文字列"",項目名3,… from 元テーブル名 where …") 3.docmd.RUNSQL ("insert into 他のテーブル名(Kanri_NO,フィールド名1,フィールド名2,フィールド名3,…) select ID+Kanri_Max,項目名1,""文字列"",項目名3,… from 中間テーブル名 ") ※1.のSQL文で中間テーブルは初期化され 新規に挿入されるレコードのIDには自動的に 1からの連番が振られます。

mamekomatsu
質問者

お礼

2回も教えていただきありがとうございます。RUNSQLという考えがなかったので勉強になりました。分けて書いていただいたので読みやすかったです

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

先に連番だけを振っておきたいというのであれば、 テーブル名をT1、連番を振るテーブル名をT2として、 Kanri_NOは数値型とし、 INSERT INTO T2 ( Kanri_NO ) SELECT (SELECT (COUNT(*) + (SELECT Max(T1.Kanri_NO) AS Kanri_Max FROM T1)) FROM T1 AS Temp WHERE Temp!Kanri_NO<=T1!Kanri_NO) AS 連番 FROM T1; あるいは、他のフィールドも同時に追加したい というのであれば、他のフィールドを上記の クエリに追加すればいいです。

mamekomatsu
質問者

お礼

ありがとうございます。No3の方を使ってみました

すると、全ての回答が全文表示されます。
  • shinkami
  • ベストアンサー率43% (179/411)
回答No.1

他のテーブルのkannri_No.のデータ型がオートナンバー型なら何も気にする必要はありません docmd.RUNSQL ("insert into 他のテーブル名(フィールド名1,フィールド名2,フィールド名3,…) select 項目名1,""文字列"",項目名3,… from テーブル名 where …") 上記は1行にして下さい。 ※ここで指定するフィールド名にkannri_No.を外す ・フィールド名と項目名は呼称が違っていてもデータ型が同じであればOK ・記述するフィールド名は一部外していてもOK ・文字列定数のときは上記のように2つづつの[""」で囲む

mamekomatsu
質問者

お礼

回答ありがとうございます。初心者で理解に時間がかかりましたが勉強になりました。スムーズに行きそうな気がします。今後の参考にさせていただきます。

すると、全ての回答が全文表示されます。

関連するQ&A