三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Access 最適化すると削除されたオートナンバー型のフィールド値が戻る場合がある 最適化するとID が調整される?ウソつくなよ > じゃやってみますか・・・とムキになる老害(笑)

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 問い合わせ F

Excelマクロをタスクスケジュールにて1日1回動作させる

当該フィールドに「完了」の文字が入っているレコードは、ファイル名:完了分、にレコード移動を
させたのちに、レコード削除を行っております

ここで、移動される ID 5024 が 重複エラーを出す・・・

なんて、レアなケースを考えてみました。

Accessの最適化処理が入っていなかったらスミマセン、私の妄想ストーリーはスルーしてください。

あとは、Accessの最適化を疑ってみましたが、
新サーバーに移行したらテストを行うのは、当然なので、

業務が終了したら、
5027 テスト問い合わせ 完了にする
を最後に登録、 Excelマクロが走るかテスト
テストOK
5027 テストデータを消す
あっちゃいけないけど、確認後移行先の5027を消し忘れてて、
テストのせいで・・・なんてストーリーも・・・

オートナンバーで絶対に重複は無いと思わないで、
一度、
問い合わせ管理簿と移行先のIDが重複していないか?チェックしてみては?

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)