Microsoft Access での連番について教えてください。


すでにレコードが入力されているテーブル内のあるフィールドに対して、1件1件のレコードを一意に識別できるように連番を振りたいと考えています。

更新クエリ1発で簡単にできる方法があれば教えてください。

外部からプログラムでクエリを呼び出すので手操作が介入する方法は使えません。

また、ADO/DAOでレコードを1件1件フェッチしては連番を設定していく、というような方法は分かるので、もっと簡単でスマートな方法を知りたいです。

回答の条件
  • 1人2回まで
  • 登録:2007/01/30 12:34:25
  • 終了:2007/01/31 17:55:12

回答(4件)

id:godhoruseye No.1

godhoruseye回答回数23ベストアンサー獲得回数22007/01/30 18:52:31

テーブル内のあるフィールドのデータ型をオートナンバー型にすれば済む話ではありませんか。

特にクエリでする必要も無いはずです。

対象のテーブルをデザインビューで開いて、一意に識別できるように連番を振りたいフィールドのデータ型をオートナンバー型にして保存して開けば

番号が振られますよ。

id:you1982

申し訳ありませんが、そう言う話ではありません。

2007/01/30 18:54:46
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012007/01/31 00:33:35

ポイント85pt

>1件1件のレコードを一意に識別できるように連番を振りたい

レコードを一意にするためのキーフィールドが別に存在するのであれば

SET 連番フィールド = DCount("*","T","キー <= " & キー);

なんて形で対応できますが、そうではないから連番を振りたいのですよね?


だとすればオートナンバー型フィールドをクエリで追加するのが良いと思いますよ。

ALTER TABLE テーブル名 ALTER COLUMN フィールド名 COUNTER (1,10)

1は初期値、10の部分は増分なので通常は1ですが説明用に見分けやすくするため10と書きました。

id:you1982

お察しいただいているとおり、キーがないテーブルなので連番を振りたいという話なんですが、外部からその番号を任意に与えることもあるのでオートナンバーは使いたくないのです。

ただ、ご回答を応用してオートナンバーCOLUMNを追加した上でそれを目的のフィールドにコピーした後、オートナンバーCOLUMNを削除、というようにすればそれはそれでOKな気もしてきました。

コスト的には1行1行フェッチして値を入れるよりも少し速そうな気がしますね。

何となくテーブル定義をいじるのは美しくない気がするので、もし他にスマートな方法がありましたら引き続きお願い致します。

2007/01/31 00:48:58
id:anderson No.3

anderson回答回数11ベストアンサー獲得回数02007/01/31 15:55:24

Uniqueキーが対象テーブルに既にあるのなら、キーとオートナンバーフィールドのテーブルBを作っておき、元テーブルからキーをインサート。で、次はテーブルBのキーを元にオートナンバーを元テーブルに更新(元テーブルには空きフィールドを作っておく)、とか。

id:you1982

前回答のコメントに書いたようにユニークキーはありません。

2007/01/31 17:34:30
id:anderson No.4

anderson回答回数11ベストアンサー獲得回数02007/01/31 16:00:06

ポイント5pt

ついでに思いついたのですが、元テーブルと同じレイアウトの空テーブルを用意しオートナンバーのフィールドを追加しておく。で、元テーブルから空テーブルにインサートすると空テーブル側に追加の際オートナンバーがふられます。

  • id:kn1967
    『レコードを一意にするためのフィールドを用意しておかなかった』
    ということはテーブル設計の失敗とも言える事なので、
    『テーブル定義を弄って直すというストレートな方法が一番スマート』
    だと私は思いますが、それ以外の方法(1行1行フェッチは除く)があるとすれば私も知りたいです。

    >外部からその番号を任意に与えることもある
    Accessということで容量的に心配ならばお勧めしませんが、出来れば、オートナンバー型フィールドと一意の数値を入れておくフィールドを分けて考えることをお勧めします。
    そうすれば、後から操作した事によって何らかのミスが発生してもフォローしやすくなります。

    以上、余談なのでコメント欄で失礼。
  • id:you1982
    補足をいただき、ありがとうございます。

    「設計の失敗」は、ソフトウェアエンジニアリングの観点から言えば全くその通りなのですが、それが全てではない場合もあるということなんです。

    Accessはあまり詳しくないので、Accessならではの裏技みたいなものがあるかな、と思ったのですが、どうも難しそうですね・・・。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません