• ベストアンサー

アクセスで「空き番」の確認

Access2000を使用しています。 オートナンバー型でないフィールドで、入力の 際にdmaxを使用して連番を振っているのですが、 登録されているデータに関して、空き番がない かどうかを確認したいのですが何か方法はあるでしょうか? (登録されているレコード数は約三万件ですので目で確認  するだけではきついので・・・・) 何か良い方法があるようなら教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.3

次の条件で VBAを作りました。  ◎テーブル名 = テーブル1  ◎連番のフィールド名 = ID とし  ◎連番は後から入力した数値が   先に入力した数値より   小さくなることは無い。   (dmaxを使用しているので大丈夫かと思いますが) Sub test() Dim Db As Database Dim Rs As DAO.Recordset Dim Temp As String Dim I As Integer Set Db = CurrentDb() Set Rs = Db.OpenRecordset("テーブル1") Rs.MoveFirst I = 1 Temp = "" Do Until Rs.EOF = True Do While I < Rs!ID Temp = Temp & " " & I I = I + 1 Loop Rs.MoveNext I = I + 1 Loop Rs.Close Set Rs = Nothing Db.Close Set Db = Nothing MsgBox "次の数字が抜けています。" & vblf & Temp End Sub

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

その他の回答 (4)

noname#4564
noname#4564
回答No.5

参考URLで提示されているSQLが使えるかもしれません。 エイリアスを使用した対象テーブル自身への自己結合で処理していますので、 番号管理用に別表を使用する私の案(No.2)よりスマートかもしれません。 (動作検証はしていません)

参考URL:
http://www.geocities.co.jp/SiliconValley/4334/unibon/sql/fillhole.html
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

バッチ処理的な考えを出してみます。#3のご解答と似ているようでもあり違うようでもあり。一応載せます。 ソートと主キーの関係は、下記「注意」をご参考に。 適宜Msgboxはコメント化して下さい。 (A)月、週、日1回とかで良ければ。また (B)ソートしても良ければ。 ------- (1)データ-並べ替-昇順でソート (2)データをシーケンシャルに読んで、直前のものと比べて+1かどうかチェックする。 ------ 注意 主キーを設定していなくて,「ID」フィードが主キーに設定されていることを気づかず、ソート後に、テーブル上で、番号フィールドでソート出来ているに関わらず、テスト結果がおかしく、手間取りました。 今は番号フィールドが主キーとしてテストして上手く行きました。 ------ Sub test01() Dim db As Database Dim rs As Recordset Dim mae番号 Dim fst As String Set db = CurrentDb Set rs = db.OpenRecordset("経理1", dbOpenDynaset) fst = "y" '第一レコードのスイッチサイン rs.MoveFirst While Not rs.EOF '------------前レコードの番号+1の番号か MsgBox rs!番号 ' & "=" & mae番号 + 1 If fst = "y" Then GoTo p01 If Val(rs!番号) = Val(mae番号 + 1) Then Else MsgBox rs!番号 & "連続せず" End If '----------- p01: fst = "n" mae番号 = rs!番号 '1つ前の番号として保存 rs.MoveNext Wend '--------- rs.Close End Sub

すると、全ての回答が全文表示されます。
noname#4564
noname#4564
回答No.2

1~登録済み最大番号までのすべてを登録(欠番なし)した番号管理用の表を用意して、Left JoinまたはNot Existで判断するとよいと思います。

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

まず最終レコードと連番の数字が合ってるかを調べてみるとか、それでも心配ならクエリで調べたいテーブルのフィールドを選択して抽出条件に null と入力して実行すれば値の入っていないレコードがでます。一レコードも出なかったら空き番がないということでは

enako
質問者

補足

すばやい回答ありがとうございます。 連番となっているのは主キーですので nullとなっていることはありません。 VBAなどでできれば良いなー(VBAの 知識はほとんどありませんが・・・) と考えております。

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

関連するQ&A