掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
IDの自動生成と削除 (ID:37218)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
欠番IDの再利用にこだわるのであれば、ID取得関数を作っては? 下記でどうですか? //IDを取得する関数 function GetNextID: Integer; begin with query1 do begin SQL.clear; SQL.Add('select min(ID) as A from TableA'); Open; //min(ID)が1の時は欠番を探す(欠番がなければ(MaxID+1)を) if FieldByName('A').AsInteger = 1 then begin close; SQL.clear; SQL.Add('select min(a.ID + 1) as NextID'); SQL.Add(' from (select ID from TableA) a'); SQL.Add(' where not exists'); SQL.Add(' (select * from TableA b where b.ID = a.ID + 1);'); Result := FieldByName('NextID').AsInteger; close; end else begin //Min(ID)>1のときは1〜(MinID-1)が欠番となっているので1を再利用 close; Result := 1; end; end; end; //メイン側 var ID: Integer; begin ID := GetNextId; if ID > 999 then begin ShowMessage('満杯で〜す!'); Exit; end; with query2 do begin SQL.clear; SQL.Add('Insert Into TableA (ID, Data1, Data2, ...)' SQL.Add(' Values (:ID, :Data1, :Data2, ...'); : : end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.