dポイントプレゼントキャンペーン実施中!

Delphi データベースコンポーネント使用時におけるIDの自動生成について
 質問させていただきます。よろしくお願いします。現在DelphiでTQuery,TDatabase,TDataSourceを使用し、データベースに接続、DBGridでレコードを一覧表示し、DBEditとDBNavigatorでレコードの新規登録や編集が行えるようにしています。

 ここでIDというフィールドを作り、これを主キーとして扱っていますが、レコードの新規作成時、自動的に連番で数値が挿入されるようにするにはどうすればいいのでしょうか? 

 ひとつ方法を思い付き実際やってみて今のところうまくいってはいるのですが、私が採択した方法だと少々問題があります。

 exe起動時にレコードをソート、IDのフィールドで一番値の大きい数値を取得し、新規作成時にはその値に+1してDBEditに挿入するようにしています。しかしこれだと、いくらIDの値が小さいレコードを削除しても値の大きいレコードがある限り、新規作成時にIDとして挿入される値は大きくなるばかりなのです。

 稚拙な文章で申し訳ありませんが、お教えいただければと思います。
 よろしくお願いします。

A 回答 (2件)

>exe起動時にレコードをソート、IDのフィールドで一番値の大きい数値を取得し、新規作成時にはその値に+1してDBEditに挿入するようにしています。



普通はこの方法ですね。
そのために、IDの桁数を十分大きく設定しておきます。
例えば、毎日1000件くらいの新規登録があったとしても、IDの桁数を8桁にしておけば100年は大丈夫です。

それでも、空き番が多くなって使いづらくなってきたら、IDをリナンバリングすることもあります。


どうしても空き番を作りたくないのであれば、
レコードを削除したときに削除IDリストを作成しておき、新規作成時にはその削除IDを使用するという方法もあります。
    • good
    • 0
この回答へのお礼

なるほど。。。そういう方法があるのですね。非常に参考になりました。ありがとうございました。

お礼日時:2010/06/28 22:05

色々なDBでいわゆるオートナンバーフィールドで欠番が生じるのは同じようです。

つまりお考えの筋道は主流である。
下記URLなど、ご参考にならないでしょうか?
http://q.hatena.ne.jp/1189402025
    • good
    • 0
この回答へのお礼

 ありがとうございます。他サイトでのQ&Aまでお付けいただいて。。。自分のつたないプログラミングスキルに少し自信が持てました。ありがとうございました!

お礼日時:2010/06/28 22:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!