Microsoft Access 掲示板

テーブル作成時に指定スタートからの連番を作成したい

4 コメント
86 views
4 フォロー

毎回大変お世話になっています。
非連結フォームがあります。それのコントロールは下記があります。
[製品ID] [serial番号初期値] [製造台数] [備考] 等
それを コマンドボタンを使いSELECT INTO で製造台数分をテーブル(T1)作成したいのです。(DAOでもいいのですが)
T1のフィールドは[製品ID] [serial番号] [製造台数] [備考] 等 でserial番号は serial番号初期値からスタートで連番にしたいのです。このT1は一時的なテーブルなので主キーは特に必用ありません。
例えば非連結フォームで[製品ID]:3、[serial番号初期値]:101、[製造台数]:10 ならば
製品IDが3でserial番号101からスタートで110迄の10ヶのレコードが作成される形です。
どの様なコードにしたらいいでしょうか? 連番の作成がよくわからないもので。
宜しくお願いします。

beginner
作成: 2025/03/31 (月) 12:48:30
通報 ...
1

テーブル作成クエリ(SELECT INTO)ですか。
それより、T1テーブルは設計時に作成しておいて、削除クエリでデータ削除、追加クエリ(INSERT INTO)でデータ追加の方がいいかと思います。
テーブル削除→テーブル作成はファイル破損の危険性が高いように思いますので。

削除クエリは簡単にできると思いますので、追加クエリ(INSERT INTO)の作成法を回答します。

まずは、0から予想される追加最大値までの連番のテーブルを作成しておきます。

T_連番

No
1
2
3
100

下記のようなSQLのクエリを作成します。

INSERT INTO T1 (製品ID, serial番号, 製造台数, 備考)
SELECT Forms![フォーム名]![製品ID], Forms![フォーム名]![serial番号初期値]+[連番], Forms![フォーム名]![製造台数], Forms![フォーム名]![備考]
FROM T_連番
WHERE T_連番.連番 < Forms![フォーム名]![製造台数];

この追加クエリを実行すればご希望の結果になります。

2
beginner 2025/04/01 (火) 08:34:35 61dd6@0642b

hatenaさん ありがとうございます。
全く思いつかないアイデアです。これはシンプルでいいですね。SELECT Forms!の様にWHERE以外にフォーム値をもってこれるとは知りませんでした。
「テーブル削除→テーブル作成はファイル破損の危険性が高いように思いますので」⇒そういうものとは知りませんでした。
今回の連番とは別ですがSELECT INTOを幾つか使っていますが、この処理は頻繁に使う場面ではしない方がいいのですね?
削除クエリで全レコードを一旦削除して追加クエリで新たに追加した方が安全なのですね?

3

テーブル削除→テーブル作成と、データ削除→データ追加では、やはり前者の方が負荷が高いですよね。実際に比較テストしたわけではないので感覚的なものですが。

また、テーブル作成クエリでは細かいプロパティ設定はできないし、リレーションシップを設定してあるとそれを削除してからでないとテーブル削除できないので面倒なことになります。私は運用時にテーブル削除はしない設計にします。

4
beginner 2025/04/08 (火) 08:28:38 61dd6@49105

hatenaさん ありがとうございます。そういった事はあまり情報ありませんので知識乏しい私には大変有り難いです。随時変更していきたいと思います。今回もお世話になりました。