![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: TQuery, TDataSource
Letzte Rechnungsnummer um 1 hochzählen
Guten Abend,
benötige bitte Hilfe bei folgender Lösung:
Delphi-Quellcode:
Ich möchte gerne erreichen, dass die Hochzählung generell bei der
TFormRechnungen.QueryRechnungenBeforeInsert(DataSet: TDataSet);
var letzte_nummer: Integer; QueryRNr: TQuery; begin letzte_nummer := 0; QueryRNr := TQuery.Create(nil); try QueryRNr.SQL.Clear; QueryRNr.DatabaseName := QueryRechnungen.DatabaseName; QueryRNr.SQL.Add('SELECT LAST(RNr) FROM Rechnungen'); QueryRNr.Open; letzte_nummer : QueryRNr.Fields[0].AsInteger; finally QueryRNr.Close; QueryRNr.Free; inc(letzte_nummer); // Rechnungsnummer um 1 erhöhen EditRNr.Text := Format('%.10d',[letzte_nummer]); zuletzt eingetragenen oder geänderten Rechnungsnummer startet. Wie bitte kriege ich das hin? Gruß Lombi |
Re: Letzte Rechnungsnummer um 1 hochzählen
Machs doch direjt über sql.
Ich hab in meiner SQL-Datenbank im Feld "gid" unter extras "auto_increment" stehen. Also wird bei jedem neuanlegen der wert um 1 erhöht. Ich hoffe, ich konnte dir Helfen! |
Re: Letzte Rechnungsnummer um 1 hochzählen
Hallo Lombi,
dir scheinen die von Paradox mitgebrachten AutoInc-Felder nicht zu gefallen. Getippt und nicht getestet:
Delphi-Quellcode:
Gute Nacht
function NextKey(tblName, fldName: String): Integer;
begin with TQuery.Create(nil) do begin DatabaseName := Global.DatabaseName; SQL.Text := Format('SELECT MAX(%s) FROM %s', [fldName, tblName]); Open; Result := Succ(Fields[0].AsInteger); Close; end; end; procedure TFormRechnungen.QueryRechnungenBeforeInsert(DataSet: TDataSet); begin DataSet.FieldByName('RNR').AsInteger := NextKey('RNR', 'Rechnungen'); end; marabu |
Re: Letzte Rechnungsnummer um 1 hochzählen
Hallo,
Guten Morgen, da fehlt dann noch irgendwo ein +1. Heiko |
Re: Letzte Rechnungsnummer um 1 hochzählen
Zitat:
Delphi-Quellcode:
Succ holt den Successor, also den Nachfolger (+1).
Succ(Fields[0].AsInteger);
...:cat:... |
Re: Letzte Rechnungsnummer um 1 hochzählen
Oh ;)
*Brille putz* Stimmt ;) Ein prinzipielles Problem ist baer: Was passiert aber, wenn jetzt zwei Nutzer quasi gleichzeitig eine Rechnung erstellen. Dann würde die Nummer doppelt eingetragen. Hier hilft dann nur ein unique index oder man benutzt eine Extra-Tabelle mit dem Feld "LetzteRechnzungsNr", auf die nur einer gleichzeitig Zugriff hat. Das Feld könnte man auch verwenden, um z.B. am Ende des Jahres den Wert zurückzustellen. Heiko |
Re: Letzte Rechnungsnummer um 1 hochzählen
Zitat:
|
Re: Letzte Rechnungsnummer um 1 hochzählen
Die "Lösung" hier ist schlecht. Warum keine Transaktion? So schreibt man doch ins Blaue ...
Außerdem sollte die Rechnungsnummer auch NIE dem Datenbank PK entsprechen. Chris |
Re: Letzte Rechnungsnummer um 1 hochzählen
Paradox hat keine Transaktionen! Spannend wird es auch noch wenn beim Ausdruck der Rechnung zufälllig der Drucker das Papier frist, Toner alle ist oder jemand die besagte Rechnungsnummer per Hand vergeben hat. Tja wie ihr seht bin ich Optimist.
//Grüße // Martin |
Re: Letzte Rechnungsnummer um 1 hochzählen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz