掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
IDの自動生成と削除 (ID:37220)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
訂正の訂正が必要ですね 追加行の"Open"のつづりがまちがってます。(トホホ…) おまでです、 SQLでCase文を使えば1本のSQLで行けそうです。 下記SQLはFireBird 2.1で通ります。Oracleでも多分OKと思います。 function GetNextID: Integer; begin with query1 do begin SQL.clear; SQL.Add('select case when min(ID) = 1 then'); SQL.Add(' (select min(a.ID + 1) from (select ID from TableA) a'); SQL.Add(' where not exists (select * from TableA b where b.ID = a.ID + 1))'; SQL.Add(' else 1 end as NEXTID from TableA;'); SQL.Open; Result := FieldByName('NEXTID').AsInteger; Close; end; end; 簡単なサンプルテーブルを作って ID=1を欠番にした時 1が得られる ID=1以外を欠番にした時 欠番の内の最小値が得られる IDに欠番がない時 最大値+1が得られる の3通りで確認してみてください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.