@af0815
Danke für die Mühe, die du dir gemacht hast. Auf die Sache mit der separaten SQLquery war ich zwischenzeitlich auch gekommen. Im Prinzip mit dem gleichen Ansatz wie du. Gut war deine Lösung mit der Abwärtssortierung. Die habe ich schon einmal gleich übernommen. Und weil ich schon mal dabei war, habe ich auch deinen Hinweis zu den möglichen Ober- und Untergrenzen bei der Schlüsselerzeugung umgesetzt. Siehe untenstehendes Codefragment.
Das mit dem Speichern des Datums als String in der Datenbank ist eine gute Idee. Damit bleiben die Einträge direkt lesbar. Und Vergleichsoperationen sind auch weiterhin möglich.
Ich denke, das ist wohl das Optimum dessen, was sich aus der Kobination SQLite und Lazarus in Sachen Datum herausholen lässt.
Code: Alles auswählen
function Empty(const s: string): boolean;
begin
Result := (trim(s) = '')
end;
function TForm1.NewId: TIDStr;
// Get highest ID and add 1
var
q: TSQLquery;
s: string;
n: integer;
begin
q := TSQLquery.Create(nil);
q.SQL.Text := 'select ID from members order by ID desc';
q.DataBase := SQLite3Connection1;
q.Open;
s := q.FieldByName('ID').AsString;
if empty(s) then
n := 1
else
n := StrToInt(s);
Try
if (n >= 9999) then
Raise Exception.Create('Maximum of 9999 records reached!');
inc(n);
Finally
q.Free;
end;
Result := format('%.4d',[n]);
end;
viewtopic.php?p=114568#p114568
Kommentare und Anregungen sind erwünscht und jederzeit willkommen.
Ich wünsche allem Mitlesenden hier immer gute Laune und etwas höhere Außentemperaturen als derzeit.
Liebe Grüße