Access テーブルで削除されたオートナンバー型の値が戻る?
(正確には、最適化を行うと オートナンバーの値が戻るです。普通に使っていると戻りません)
うそのようなホントの話なので動画にしてみました。
ID など オートナンバー型のフィールドを作成すると、
自動的に連番を振ってくれます。
↑あたりまえですね。
なので、動画でレアケースをテストしてみます
youtu.be
https://youtu.be/HFdDzOUGoos
↑いつもの あせってしゃべっている動画ですが、動作の流れを見て笑ってください。
00:00 オートナンバー型 IDの説明
00:34 テスト1 最後のレコードを削除してから新規レコードを追加
01:11 テスト2 ↑と同様に最後のレコードを追加、最適化を行ってから、レコード追加
テスト3 最適化さえしなければ、OKです
ある条件で操作 テストをしてみます。
テスト1 最後のレコードを削除してから新規レコードを追加
1.最後のレコードを削除します
2.次に、新しくデータをレコードを登録します
連番が自動で振られることを確認します。※当たり前ですね
テスト2 ↑と同様に最後のレコードを追加、最適化を行ってから、レコード追加
1.最後のレコードを削除します
1.1 レコードを削除したので、DBの最適化を行います。
2.次に、新しくデータをレコードを登録します
連番が・・・・振られることを確認します。※あれ・・・?
オートナンバーでIDを振っているのに重複エラーが出る時に、
そんな操作、プログラムになっていないか?
確認してみてください
テスト3 最適化さえしなければ、OKです
もちろん、最後の番号を消しても、
最適化しなければ、オートナンバーが調整されることもありません。
^^^^^^
プログラム終了時に最適化していたりする時に、
伝票番号や何か、自動連番の時、気にしてみてください。
元ネタ、
teratail.com
https://teratail.com/questions/754vzgjl3gx4jp
に書いた回答を下記に・・・何言ってんだが、わからなくて、操作動画に頼ってしまった。
※文章とソースコードで説明しないと、日本語でお願いしますと言われてしまうかな・・・・
>オートナンバーで振られているフィールドの値がダブりのため、エラーとなっている
>可能性があるのでしょうか。可能性としては、かなりレアな操作方法ですが、
オートナンバー型 IDの最後(最終レコード)を削除してから、
データベースを最適化すると、Accessが勝手に最終番号※次のオートナンバーを調整する?勝手な重複ストーリーを作ると
1.完了処理
そのマクロでは、
Access DB内に存在するレコード内の特定フィールドに「完了」の文字が
入っているものを、別DB(ファイル名:完了分)に移し替える、という処理を
行っております。当該フィールドに「完了」の文字が入っているレコードは、ファイル名:完了分、にレコード移動を
させたのちに、レコード削除を行っております。2.ファイルサイズを軽くして作業効率をあげたい
*行っている作業の主旨としては、「問い合わせ対応の完了分は、日々使用している
問い合わせ管理簿からデータ移動をさせ、ファイルサイズを軽くして作業効率をあげたい。もしかして、Excelで1.完了データを移動後、
AccessのDBを 最適化して(2.の軽くするため) サイズを減らすなどの処理を自動で行っていませんか?ID
5022 Access オートナンバー型で重複することってあるの?
5023 Excelマクロ:実行時エラー'-2147217887(80040e21)'
5024 めったにないけど、問い合わせで登録後、すぐに解決 即 完了してしまった当日、最後に5024が登録されます
なぜか、すぐに解決、完了 状態になりますExcelマクロをタスクスケジュールにて1日1回動作させる
当該フィールドに「完了」の文字が入っているレコードは、ファイル名:完了分、にレコード移動を
させたのちに、レコード削除を行っております私の妄想予想では、ここで、Accessの最適化が実行される
すると、最後に登録された ID 5024 が 完了なので、移動して削除
Accessの最適化で次の営業日、あらたに問い合わせが登録される
5024 えっ、これはまずいなぁ
5025 問い合わせ E
5026 問い合わせ Fその次の日に、5024の問い合わせが完了します
ID
5022 Access オートナンバー型で重複することってあるの?
5023 Excelマクロ:実行時エラー'-2147217887(80040e21)'
5024 えっ、これはまずいなぁ でも 後日 完了する
5025 問い合わせ E
5026 問い合わせ FExcelマクロをタスクスケジュールにて1日1回動作させる
当該フィールドに「完了」の文字が入っているレコードは、ファイル名:完了分、にレコード移動を
させたのちに、レコード削除を行っておりますここで、移動される ID 5024 が 重複エラーを出す・・・
なんて、レアなケースを考えてみました。
※Accessの最適化処理が入っていなかったらスミマセン、私の妄想ストーリーはスルーしてください。
あとは、Accessの最適化を疑ってみましたが、
新サーバーに移行したらテストを行うのは、当然なので、業務が終了したら、
5027 テスト問い合わせ 完了にする
を最後に登録、 Excelマクロが走るかテスト
テストOK
5027 テストデータを消す
あっちゃいけないけど、確認後移行先の5027を消し忘れてて、
テストのせいで・・・なんてストーリーも・・・オートナンバーで絶対に重複は無いと思わないで、
一度、
問い合わせ管理簿と移行先のIDが重複していないか?チェックしてみては?