• ベストアンサー

アクセスでオートナンバーをリセットするには?

Accessで連番をふるプロセスで質問です。 データをあるテーブルに追加した時に、連番をふりたいと考えています。 最も簡単なのはオートナンバーフィールドを設定する方法なのですが、この場合一つ欠点があります。 それはレコードを全削除した場合でもナンバーがリセットされないという事です。 追加クエリでテーブルにデータを追加する前に必ずテーブルのレコードを全削除するのですが、 この際にオートナンバーも一緒にリセットする方法は無いでしょうか? また、質問の題名とは変わってしまうかもしれませんが、 オートナンバーを使用せずにレコードに連番をふる方法があればご教授下さい。

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.4

>最適化せず(プログラムを走らせたままで)オートナンバーをリセットする方法をもしご存知でしたらご教授頂ければ幸いです。 テーブルのレコードを削除してからコピーすると、 オートナンバーはリセットされます。 それを利用した方法です。 他にも方法はあると思いますが、これが簡単かな。 Sub AutoNumberReset()  Const TargetTable = "Table1" 'リセットしたいテーブル  Const TargetAutoID = "ID" 'テーブルのオートナンバーのフィールド名  Const TargetFields = "Data1, Data2" 'オートナンバー以外のフィールド名    Const TempTable1 = "temp1" '作業用テーブル1  Const TempTable2 = "temp2" '作業用テーブル2     '確認メッセージなし  DoCmd.SetWarnings False    'ターゲットを作業用テーブルにコピーし削除  DoCmd.CopyObject , TempTable1, acTable, TargetTable  DoCmd.CopyObject , TempTable2, acTable, TargetTable  DoCmd.DeleteObject acTable, TargetTable    '作業用テーブル2のレコード削除する  DoCmd.RunSQL "delete * from " & TempTable2    '作業用テーブル2をターゲットにコピー(この時点でリセットされる)  DoCmd.CopyObject , TargetTable, acTable, TempTable2    '作業用テーブル1からレコードの内容をターゲットに戻す(オートナンバー以外のデータ)  DoCmd.RunSQL "insert into " & TargetTable & " select " & TargetFields & " from " & TempTable1 & " order by " & TargetAutoID    '作業用テーブルの削除  DoCmd.DeleteObject acTable, TempTable1  DoCmd.DeleteObject acTable, TempTable2    '確認メッセージあり  DoCmd.SetWarnings True   End Sub

xtoufux
質問者

お礼

ご返答いただきありがとうございます。 回答を読んでいて、「コピーする」という部分で思いつきました。 どうせならテーブル内のレコードでなくテーブル全体を削除して、マクロのオブジェクトコピーから基となるテーブルを毎回同じ名前でコピーすれば良いのではないか、と。 思ったとおり毎回オートナンバーが1から反映されるようになりました。

その他の回答 (3)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

>オートナンバーを使用せずにレコードに連番をふる方法があればご教授下さい。 リセットの方法については回答出ているので、こちらの質問に答えます。 これには何らかの並べ替えに使用できるフィールドが必要です。 (重複は不可) すでにオートナンバーのフィールドがあるならこれを利用します。 (何番から始まってもOK、番号が抜けててもOK) 仮にこのフィールドをF1とします。 テーブル名をTable1と仮定します。 ----以下手順---- 新規のクエリを作り、テーブルを追加します。 クエリのフィールドに下記を記述 連番:DCount("F1","Table1","F1 <=" & [Table1].[F1]) 残りのフィールドは適当に。 ----以上手順---- これで1から始まる連番が追加できます。

xtoufux
質問者

お礼

ご返答いただきありがとうございます。 なるほど、クエリで簡単に出来るのですね! これは大変参考になりました。ありがとうございました。

  • yupokichi
  • ベストアンサー率37% (20/53)
回答No.2

Bronco7さんの言うとおり、 最適化するとオートナンバーはリセットされます。 もし100番までオートナンバーをとっていて 101~150のデータを削除したあと最適化すれば また101からの入力が可能です。 最適化は ツール - データベースユーティリティ - 最適化/修復 から行うことができます。 また、ツール/オプション/全般タブで 「閉じるときに最適化する」にチェックをいれておけば データベースを閉じるたびに最適化することも可能です。 こうすることで、データベースの肥大化を防ぐことが可能です。

xtoufux
質問者

補足

ご返答頂きありがとう御座います。 No.1の補足にも記述したのですが、最適化をせずに、あるプログラムの中でオートナンバーをリセットする方法を探しております。 最適化せず(プログラムを走らせたままで)オートナンバーをリセットする方法をもしご存知でしたら引き続きご教授頂ければ幸いです。

  • Bronco7
  • ベストアンサー率29% (150/511)
回答No.1

オートナンバーを全削除したのなら データベースの最適化/修復を実行すれば リセットされますよ。

xtoufux
質問者

補足

ご返答頂きありがとう御座います。 たしかに最適化するとリセットされるんですよね。 ですが最適化の場合には実際は一旦データベースが終了し再起動している状態なので、起動時に走るプログラムが動いてしまったり、最適化前に開いていたフォームが復元されないなどの問題が出てしまうのです。 最適化せず(プログラムを走らせたままで)オートナンバーをリセットする方法をもしご存知でしたらご教授頂ければ幸いです。

関連するQ&A

  • アクセス2000 オートナンバーについて

    いつもお世話になります。 アクセス2000を使用しているのですが、Dsum関数を使用したいので、時系列を付けるためにオートナンバーを付けています。必要データが日々変わるためにこのテーブルは全データを削除し追加クエリーを使用して計算もとのテーブルをその都度必要なデータのみにしています。 現在テスト中で特に問題はないのですが、本稼動した場合、オートナンバーが一日に10000程になってしまいます。計算に使うレコード数は200程度なのですが、処理作業を1日に50回程度行いますので。 2年程度メンテナンスはする予定をしていないので、このままではオートナンバーが7000000程度になってしまいます。オートナンバーの数字が多くなることによるエラー等は発生しないのでしょうか。またオートナンバー以外に連番をふる方法はあるのでしょうか。 宜しくお願い致します。

  • access2007のオートナンバーについて

    access2007のオートナンバーについて こんにちは、さっそくですが質問させていただきます。 accessの勉強を始めた者ですが、 オートナンバーを指定したフィールドと、その他の必要な項目の フィールドから成るテーブルを作成して、 オートナンバー1~3までのレコードを入力して、 オートナンバー3のレコードを削除した時、 そのあとで、レコードを追加すると、 オートナンバー4のレコードが作成されるのですが、 このレコードをオートナンバー3のレコードとして、 作成することはできるのでしょうか? そのような設定ができろのかどうか、もしできるのであれば、 その方法や、参考になるサイトなど、なにぶん初心者ですので 教えていただけないでしょうか。 よろしくお願いします。

  • Access2003 データ型 オートナンバーについて エクセルからテ

    Access2003 データ型 オートナンバーについて エクセルからテーブルをインポートする方法 主キーである、IDと名をつけたフィールドのデータ型は"オートナンバー"でレコード新規入力際、自動で番号がふられていくようにしています。 このテーブルにエクセルのレコードをインポートして追加したいのですが、インポートできません。 ※オートナンバーフィールドが原因と思われます。 どうすれば、エクセルからこのテーブルにレコードをインポートし、追加されたレコードにオートナンバーで番号を割り振る事が出来ますででしょうか? 最も、シンプルな方法をお教え願います。

  • ACCESS2000でオートナンバーを1から付けたいのですが

    ACCESS2000のテーブルで新規に作ったときはオートナンバーフィールドが1からになるんですが、何度かレコードの試験入力や削除を繰り返しているうちに、頭の番号が増えていきます。テーブルのデザインで、オートナンバーをテキスト型にして、新しいオートナンバー型行を挿入しても1からになりません。なにかよい方法はないでしょうか?

  • Accessでの新規レコードの追加の方法

    Windows XP上でMicrosoft Access 2000を使用しています。 オートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加したいのですが、クエリやそれを基にしたフォームを介した方法はもちろんのこと、テーブルをデータシートビューで表示した状態でも追加することができません。 例えばレコードセレクタからレコード追加を選んでレコード保存を選んでも追加されません。 このテーブルに別のフィールドを追加してデータを入れるとレコードの追加が可能なのですが、オートナンバー型フィールド1つのみではうまくいきません。 どなたかオートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加する方法を御存知でしたら御教示下さいませ。

  • ACCESS2000のオートナンバー型について

    OSはWIN98です。ACCESS2000です。 ACCESS2000にてテーブルの主キーのフィールド(追番)に オートナンバー型を設定しました。 テーブルにデータを仮に100書きこんだとします。 その後に、その100個のデータを削除します。 そして、削除された後の最初のレコードにデータを 書きこもうとすると追番のフィールドが "101" に なってしまいます。新たに書きこむ時に追番を "1" にすることはできないでしょうか? 皆様よろしくお願いします。

  • オートナンバー型を1から始める方法はありますか?

    アクセスのVBAで mySQL = "DELETE Tテーブル.* FROM Tテーブル;" DoCmd.RunSQL mySQL を実行して テーブルのデータをすべて削除してから、 データを追加するコードを実行しているのですが オートナンバー型のフィールドが前回の続きの値から始まります。 運用上問題ないのですが 途中の数字から始まってスッキリしません。 削除クエリを実行しても オートナンバー型を1から始める方法はありますか?

  • Accessでのテーブル作成や追加クエリなどについての質問です。

    ◆テーブル作成クエリで作成するテーブルにオートナンバー型のフィールドを設けたい。◆ (ナンバーが必ず1から振られることが条件) ※補足※ あらかじめオートナンバー型を含むテーブルを用意し、追加クエリ&削除クエリを使用すればよいという意見もありますが、この場合オートナンバー型のフィールドはカウントをアップし続けてしまう為断念。 ★教えてほしい事★ テーブル作成クエリからオートナンバー型のフィールドを作成できるのか? もしくは あらかじめオートナンバー型を含むテーブルを用意し削除クエリでテーブルのデータを空にしてから追加クエリでデータを入力しても必ずオートナンバー型のフィールドの先頭値は"1"から始まるようにできるか? 宜しくお願い致します。

  • アクセス2007でオートナンバーを任意の番号から始めるには

    テーブルを開いて、作成のリボン中の「クエリデザイン」→オートナンバーを任意の番号から始めたいテーブルを選んで「追加」→オートナンバー型の当該フィールド(以下、受付番号という。)を選択→デザインのリボン中の「更新」→「レコードの更新」で「100+[受付番号]」と入力→実行 すると 「フィールド「受付番号」は更新できません。フィールドが更新可能ではありません。」とのエラーメッセージが出るのですが、どうしたらオートナンバー型のフィールドである受付番号を101から始められるのでしょうか?

  • Accessのテーブルのレコード追加について

    お世話になります。 テーブルのレコードをコピーして、別のテーブルに 「編集」の中の「追加貼り付け」でテーブルのレコードを 追加しました。 しかし、データ型をオートナンバーにしているフィールド があったのですが、追加したレコードの部分のナンバーが 連番になりません。 どの様にしたら、追加した分も連番になりますでしょうか。 お教え下さいます様、宜しくお願い致します。