Code: Alles auswählen.
DATA hoechste_versionsnummer type LFNUM.
SELECT MAX( VERSION ) into hoechste_versionsnummer FROM ZTABELLE
WHERE QMNUM = DeineQMNUM.
ADD 1 TO hoechste_versionsnummer. " Damit hast Du die nächste freie Nummer
Dazu macht man obige Anweisung erst unmittelbar vor dem Update und fertig. Wenn man natürlich die Nummer zieht und dann erst durch den Prozess läuft, ist klar dass jeder andere dieselbe Nummer bekommt.DeathAndPain hat geschrieben: ↑26.04.2019 15:26Wenn ich das richtig verstehe, willst Du in die Tabelle Einträge einfügen, bei denen QMNUM gleich ist und willst dann jeweils eine neue Nummer für VERSION haben?
Dafür gibt es zwei Lösungsansätze: einen einfachen und einen professionellen.
Der einfache sieht so aus:
(....) Das hat auch den Vorteil, dass es keine Probleme gibt, falls zwei Anwender genau zeitgleich einen neuen Datensatz anlegen wollen (bei obigem Code könnte es dann theoretisch passieren, dass beide dieselbe freie Nummer erhalten).Code: Alles auswählen.
DATA hoechste_versionsnummer type LFNUM. SELECT MAX( VERSION ) into hoechste_versionsnummer FROM ZTABELLE WHERE QMNUM = DeineQMNUM. ADD 1 TO hoechste_versionsnummer. " Damit hast Du die nächste freie Nummer
??? Fünf Clicks und fertig
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain
Mea culpa. Leider hat Ralf völlig recht. Für Positionsnummern sind Nummerkreise definitiv nicht das Mittel der Wahl. Evtl. dann dafür sorgen, dass die Hauptnummer ( QMNUM ) vom Programm gesperrt wird - dann kann kein Anderer reinpfuschen.ralf.wenzel hat geschrieben: ↑28.04.2019 21:26Ja, und dann muss ich den NUMBER_GET_NEXT aufrufen. Im Vergleich zu einem einzigen SELECT finde ich das etwas oversized. Nummernkreisobjekte würde ich für sowas wie Belegnummern vergeben, aber nicht für Positionsnummern, die wirklich nur eine laufende Nummer darstellen (wie diese Versionsnummer), die ich auch noch ganz am Schluss vergeben kann.
Wir machen das im aktuellen Projekt auch so: Untersuchungsauftragnr. per Nummernkreisobjekt, Counter per SELECT MAX+1.
Ralf