Da hier ja sowieso kein potenter
SQL-Server zum qualmen gebracht werden soll, würde ich hier den Heimvorteil der
BDE/
Paradox-Kombination ausnutzen: Was spricht denn gegen ein sequentiuelles Durchlaufen der Tabelle. Dabei kannst du doch die Lücken direkt erkennen und auflisten. Das hier unbeding mit
SQL zu vergewaltigen ist doch gar nicht zielführend.
Delphi-Quellcode:
procedure FindGaps(DataSet: TDataSet; FieldName: string; Target: TStrings; CheckFirst: Boolean);
procedure AddGap(von, bis: Integer);
var
S: string;
begin
if von < bis then begin
S := Format('%d-%d', [von, bis]);
end
else begin
S := Format('%d', [von]);
end;
Target.Add(S);
end;
var
fld: TField;
id: Integer;
nextId: Integer;
S: string;
begin
Target.BeginUpdate;
try
DataSet.Active := true;
if DataSet.IsEmpty then
Exit;
{ DataSet muss nach FieldName sortiert sein }
fld := DataSet.FieldByName(FieldName);
DataSet.First;
if CheckFirst then begin
nextId := 1;
end
else begin
nextId := fld.AsInteger;
end;
repeat
id := fld.AsInteger;
if nextId < id then begin
AddGap(nextId, id - 1);
end;
nextId := id + 1;
DataSet.Next;
until DataSet.Eof;
finally
Target.EndUpdate;
end;
end;