
Delphi データベースコンポーネント使用時におけるIDの自動生成について
質問させていただきます。よろしくお願いします。現在DelphiでTQuery,TDatabase,TDataSourceを使用し、データベースに接続、DBGridでレコードを一覧表示し、DBEditとDBNavigatorでレコードの新規登録や編集が行えるようにしています。
ここでIDというフィールドを作り、これを主キーとして扱っていますが、レコードの新規作成時、自動的に連番で数値が挿入されるようにするにはどうすればいいのでしょうか?
ひとつ方法を思い付き実際やってみて今のところうまくいってはいるのですが、私が採択した方法だと少々問題があります。
exe起動時にレコードをソート、IDのフィールドで一番値の大きい数値を取得し、新規作成時にはその値に+1してDBEditに挿入するようにしています。しかしこれだと、いくらIDの値が小さいレコードを削除しても値の大きいレコードがある限り、新規作成時にIDとして挿入される値は大きくなるばかりなのです。
稚拙な文章で申し訳ありませんが、お教えいただければと思います。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
>exe起動時にレコードをソート、IDのフィールドで一番値の大きい数値を取得し、新規作成時にはその値に+1してDBEditに挿入するようにしています。
普通はこの方法ですね。
そのために、IDの桁数を十分大きく設定しておきます。
例えば、毎日1000件くらいの新規登録があったとしても、IDの桁数を8桁にしておけば100年は大丈夫です。
それでも、空き番が多くなって使いづらくなってきたら、IDをリナンバリングすることもあります。
どうしても空き番を作りたくないのであれば、
レコードを削除したときに削除IDリストを作成しておき、新規作成時にはその削除IDを使用するという方法もあります。

No.2
- 回答日時:
色々なDBでいわゆるオートナンバーフィールドで欠番が生じるのは同じようです。
つまりお考えの筋道は主流である。下記URLなど、ご参考にならないでしょうか?
http://q.hatena.ne.jp/1189402025
ありがとうございます。他サイトでのQ&Aまでお付けいただいて。。。自分のつたないプログラミングスキルに少し自信が持てました。ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差し込み印刷のレコード数について
-
ACCESSで大量の更新を行うと「...
-
レコードセット(ADO.Recordset)...
-
Access を×ボタンで閉じ...
-
ソート処理について
-
レコードが存在しなかった場合
-
DataGridViewの、選択されてい...
-
Accessでレコードの更新を任意...
-
ACCESS VBA テーブルデータに...
-
データセットのレコード更新が...
-
AccessVBAのSQL文が突然エラー...
-
ADODBのRecordset.Deleteのエラ...
-
Access フォーム 選択されてい...
-
ADO VBA 実行時エラー3021
-
固有レコード識別子の選択とは
-
ワードの差込印刷で教えて下さ...
-
アクセスでレポートの1印刷内...
-
ACCESS VBA テキストボックス
-
[VBA] ADOの Clone と AddNew
-
カレントレコードが無い事を判...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードが存在しなかった場合
-
DataGridViewの、選択されてい...
-
ADO VBA 実行時エラー3021
-
差し込み印刷のレコード数について
-
ACCESSで大量の更新を行うと「...
-
ファイル書込みで一行もしくは...
-
カレントレコードが無い事を判...
-
ワードの差込印刷で教えて下さ...
-
アクセスでレポートの1印刷内...
-
DataGridViewの内容をDBに反映...
-
[VBA] ADOの Clone と AddNew
-
固有レコード識別子の選択とは
-
JSPのNULLレコード表示について...
-
Access を×ボタンで閉じ...
-
サブフォームに新規レコードを...
-
データセットのレコード更新が...
-
サブレンジ分割されたNDB(富士...
-
レコードセット(ADO.Recordset)...
-
DataGridViewにてセル以外をク...
-
COBOLでのランダムアクセス
おすすめ情報