
皆さん、明けましておめでとうございます。今年もいろいろとお世話になりますm(_ _)m
さて、accessに挑戦しているところですが、データをいろいろいじくっているうちに、オートナンバー型のIDが不整列となってしまいました。そこで、いったん「デザイン」からIDを削除し、再び「行の挿入」でIDを作成したところ、今度はまたIDが別の形で(飛び番=例えば、100の次に1000が来て、1100の次に101が来るというような)不整列となりました。
テーブルのフィールドには「No」というのを設けてあり、これはデータのレコード番号なのですが、それとIDが一致するようにするつもりでした。
このような場合、IDの「振り直し」はどのようにやれば出来るのでしょうか?
もう一つお尋ねです。最終「No」とレコード数は一致するはずなのですが、レコードが1個足りません。このような場合、何番のレコード(No)が抜けているのか知るには、どのようにすればよろしいでしょうか?
access初心者ですので、いろんなところでつまづいてしまいます。どうかご教示のほどよろしくお願いしますm(_ _)m
xp+office2003です。
No.5ベストアンサー
- 回答日時:
こんにちは
前にも述べましたが、
オートナンバーは一意の番号を得るためのものであって連番の為のものではありません。
一時的な「連番」はこのようなクエリで求められます。
テーブル名を T1 としています。
新規SQLビューに貼り付けてみて下さい。
SELECT T1.ID, CLng(DCount([ID],"T1","ID<=" & [ID])) AS 連番
FROM T1
ORDER BY T1.ID;
ど~~~~しても連番にしたい欠番も嫌!という場合はオートナンバー型を止めて
長整数型にしてフォームのイベントでVBAにて付与するしかありません。
が・・・一意である ID の値がコロコロ変わると他のテーブルとリンクしていた場合に
別の問題が発生しそうです。
なのでオートナンバー型の連番にこだわっても『労多くして功少なし』です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ところで欠番レコードを求めるためには連番のあるテーブルが必要なのですが
エクセル2003まででは65536までしか求められないので
テーブルを新規作成し、名前をTR、フィールド名を連番とします。
連番フィールドに、0から9 まで番号を手入力します
(10レコード出来上がります)
このテーブルを使ってクエリを作ります。
SQLビューだと
SELECT TR.連番, TR_1.連番, TR_2.連番, TR_3.連番, TR_4.連番, TR_5.連番,
[TR].[連番] & [TR_1].[連番] & [TR_2].[連番] & [TR_3].[連番] & [TR_4].[連番] & [TR_5].[連番] AS 仮番,
CLng([TR].[連番] & [TR_1].[連番] & [TR_2].[連番] & [TR_3].[連番] & [TR_4].[連番] & [TR_5].[連番]) + 1 AS 新番
FROM TR, TR AS TR_1, TR AS TR_2, TR AS TR_3, TR AS TR_4, TR AS TR_5
ORDER BY CLng([TR].[連番] & [TR_1].[連番] & [TR_2].[連番] & [TR_3].[連番] & [TR_4].[連番] & [TR_5].[連番]) + 1;
同じテーブルをクエリのデザインビューにドラッグするたびに添え字が_1 _2 _3 と自動的に付きます。
で10万レコードまでの「連番」が出来ますがご参考までに。
(かなり重たいですPentium 2.8Ghzで20秒弱掛かります)
これを元に不一致クエリを作成すれば欠番は出せますが、止まったのかと思える位相当重いはずです。
※万が一を考えてバックアップは取ってから試して下さい。
この回答への補足
ご返事が遅くなりましたm(_ _)m
詳細なアドバイスを頂きまして、落ち着いたときにトライしてみようと思います。これまで時間のない時に焦っていじくるうちに、ドジッた経験が何度もありますので・・・(^^;)
>なのでオートナンバー型の連番にこだわっても『労多くして功少なし』です
ありがとうございます。初心者なので、なんか連番でないとまずいような(何の根拠もない・・・)気持ちに囚われていたんです。
最近では、「まっ、いいか!」という気分です。いろいろご教示いただき、ありがとうございました。m(_ _)m
No.3
- 回答日時:
オートナンバーに関しては好きなのを選んでください (^^ゞ
リンクが切れないと良いのですが・・
http://support.microsoft.com/search/default.aspx …
65536レコードまでの欠番の探し方はExcelで連番を作成して、Accessにインポート。
で、そのテーブルとの不一致クエリで求められます。
「No」はAccessの予約語なので変更することをお勧めします。
http://support.microsoft.com/default.aspx?scid=k …
オートナンバーは一意(ユニーク)な番号を得るためにあるので
不連続となっていても気にすることはないです。
オートナンバーフィールドがクエリやりレーションシップのキーに使われていたりすると、
番号の振りなおしも難しくなりますし、レコードを削除すれば欠番もでます。
そもそも連番のためのデータ型ではありません。
またテーブルでは必ずしも入力順に並ぶ訳ではありませんし。
この回答への補足
ご回答、ありがとうございますm(_ _)m
いいサイトをご紹介していただき、参考になりそうです。
#2の方の解答とあわせてトライしてみます。
>オートナンバーは一意(ユニーク)な番号を得るためにあるので
不連続となっていても気にすることはないです
>そもそも連番のためのデータ型ではありません
そんな仰っていただき、少し気が楽になりました。
>「No」はAccessの予約語なので変更することをお勧めします
は知りませんでした(^^;)
早速これについては改めようと思います。
No.2
- 回答日時:
手元のパソコンにAccessが入ってないので、確認できませんが。
オートナンバーフィールド挿入の方法を使うと、元のレコードの順番が不特定になります。定かではないですが、下記の様な方法で試してみてください。1.元テーブルと同じテーブルを作成する
2.クエリーの新規作成で編集画面を開く
3.メニューバーで追加クエリーを選択、追加先テーブルをコピーしたテーブルに指定する
4.編集画面に元テーブルを追加する
5.オートナンバーフィールドを除くすべてのフィールドを一覧に追加する。
6.追加元テーブルフィールドの下方に追加先テーブルフィールドが表示されるので、一致であることを確認。一致でなければ、変更することもできる。
7.noフィールドの並び替えを上り順に指定する
8.クエリーを実行する。
9.レコードを確認。
10.問題がなければ、元のテーブルを削除して、新しいテーブルのテーブル名を元のテーブル名に変更する
やり方がいろいろがあると思いますが、Accessクエリーの中身は、SQL文です。データーベースを扱うにはSQLが欠かせません。
欠番レコードを割り出し方法も、抽出クエリーでできるので、チャンレンジしてみてください。
No.1
- 回答日時:
どのようにレコードを挿入しているかはわかりませんが、おそらく挿入元となるレコードがソートされていないです。
クエリで挿入処理をしているのであれば、クエリの編集画面で、ソート順を指定できるので、やってみてはいかが?>もう一つお尋ねです。最終「No」とレコード数は一致するはずなのですが、レコードが1個足りません
元のレコード数は足りてますか?
この回答への補足
早速のご回答、ありがとうございますm(_ _)m
どうも私の説明が不十分だったようですね(^^;)
テーブルにレコードを挿入しているのではなく、テーブルのデザイン画面で「行の挿入」をしているのです。つまり、テーブルで言えば「ID」という名前の「フィールド」を挿入しているのです。
この「ID」が“飛び番”になってしまうので、いったん「ID」フィールドを削除し、改めて「ID」フィールドを設定しているわけです。
>>もう一つお尋ねです。最終「No」とレコード数は一致するはずなのですが、レコードが1個足りません
>元のレコード数は足りてますか?
レコード数が、65,000くらいあって、「ID」とは別に通し番号の「No」というフィールドを設けているのですが、レコードが欠けていないかぎり、「No」の最終値(最大値)とレコード数は一致するはずなのです。
それが1個足りません。65,000個の「No」を目で追ってゆくわけにも行かず、なんかクエリを利用してどの番号が欠けているか調べたいのですが・・・。EXCELなら簡単に出来るのですがね。1行前の「No」との“差”を計算して、これが「2」になっているところで、欠番が生じている事になります。
ACCESSで、一つ前の「No」との“差”を計算するということができればいいのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クエリの結果が文字化け(Access...
-
45年前のレコードプレーヤを10...
-
ACCESSでテーブルにあるチェッ...
-
ACCESSでの追加クエリについて。
-
フォーム内のデータをすべて更...
-
ACCESS2010 フィルタ後のエク...
-
ACCESSのクエリ機能で重複した...
-
Accessのテーブルのリン...
-
アクセス レポートの行数を固...
-
Accessのテーブルを開いたとき...
-
アクセスの追加クエリについて
-
access2000で、テーブルのレコ...
-
アクセスのレポートで、空白行...
-
インポートエラーについて
-
Accessの最大レコード数
-
ACCESSでコピーしたレコードの...
-
文字を含むIDの自動採番
-
差込印刷での全角表示について...
-
アクセスのエラー「クエリには...
-
SQL文で パラメータが少なすぎ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
45年前のレコードプレーヤを10...
-
ACCESSでテーブルにあるチェッ...
-
クエリの結果が文字化け(Access...
-
ACCESS2010 フィルタ後のエク...
-
Accessのテーブルを開いたとき...
-
Accessで、フォームに情報を入...
-
Accessでレポート内の繰り返し...
-
Accessの最大レコード数
-
ACCESS2000 更新クエリで文字...
-
Accessのオートナンバーについて
-
フォーム内のデータをすべて更...
-
アクセスでの追加クエリでのエ...
-
Access 「主キーにはnull値を...
-
ACCESSでの関数について
-
access IDの振り直しについて
-
文字を含むIDの自動採番
-
アクセス レポートの行数を固...
-
ACCESSでのひとつ前レコードの...
-
レコード件数が0件なら印刷を...
-
データシートビューをコピーす...
おすすめ情報