痔になりやすい生活習慣とは?

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

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

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

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

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

このQ&Aに関連する最新のQ&A

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で質問しましょう!

このQ&Aと関連する良く見られている質問

QDelphi SQL

Delphi+InteBase

何がわからないのか、わかっていない状況です。

dbExpressのSQLConnection・SimpleDataSet、DataAccessのDataSource、DataControlsのDBGridを利用しています。

SimpleDataSetのDataset.CommandTextに「SELECT * FROM テーブル名」とかSQL文を書くことによって、希望のデータが表示されることまでは理解できました。

「SELECT MAX(ID) FROM テーブル名」など値を返す場合は、どのようにしたらよいのでしょうか?
またCommandText:='DELETE FROM テーブル名'とすると、エラーにはなりますが、テーブルは空になっているのでtry文できりぬけています。

根本的にSQL文をどこに記述したらよいのかわかっていません。

どなたか、お助けを・・・

Aベストアンサー

まずDelphiの教則本を1冊でも購入する事をお勧めします。
書店では少ないですがネットで探せば結構色々と出てきます。
Delphiのバージョンが不明ですがWin32の開発であればDel7もDel2006も実質変わりはありません。

さて、ご質問に簡単に回答させて頂きます。(変な所はどなたか突っ込みをお願いします)
SimpleDataSetは大雑把にQueryコントロール+DataSetProvider+DataSource+ClientDataSetの塊みたいなものと考えて下さい。
なので最初はSimpleDataSetを使わず上記の4コントロールを配置してDBGridに接続すれば構造が分かり易いと思います。
話がそれてしまいましたがSQLを発行するのはQuery系コントロールです。
ADO用とかdbExpress用とか色々ありますのでご注意を。

ヘルプや書籍を見るなどしてまずは試行錯誤してみて下さい。


人気Q&Aランキング