Einzelnen Beitrag anzeigen

BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Letzte vergebene Nummer speichern

  Alt 5. Aug 2022, 19:06
Wir haben hier ein grundlegendes Missverständnis.
Ich habe schon verstanden, wie Dein Vorschlag gemeint ist. Dein Generator habe ich kein einziges mal erwähnt. Ich meinte nur meinen Generator, der bei der ID-Erstellung benutzt wird.

Das Problem liegt hier:

-- in der SP an geeigneter Stelle:
insert into LastID (Reihenfolge, DeineID) values (Gen_ID(GEN_Reihenfolge, 1), DeineID);
Kurzfassung: Es gibt keine geeignete Stelle, wo ich diesen Code einfügen kann. Da direkt vor dem Aufruf von diesem "insert into" das "insert into" von einem anderen Benutzer aufgerufen werden kann. Ich verdeutliche es mal:

Die SP könnte so aussehen:

Code:
SP
begin
  DeineID := ErzeugeMeineID;
  insert into LastID (Reihenfolge, DeineID) values (Gen_ID(GEN_Reihenfolge, 1), DeineID);
end;
Das könnte so ablaufen, wenn 2 Benuzer die SP starten:

Benutzer A startet die SP:
Benutzer A: DeineID := ErzeugeMeineID; // DeineID = XY-1

Die SP von A läuft noch. Bevor die SP von A zum "insert into" kommt, startet B die SP und diese wird vollständig beendet:
Benutzer B: DeineID := ErzeugeMeineID; // DeineID = XY-2
Benutzer B: insert into LastID (Reihenfolge, DeineID) values (Gen_ID(GEN_Reihenfolge, 1), XY-2); //XY-2 steht in LastID als letzte ID (Reihenfolge=1)

Nun kommt die SP von A erst zum insert into:
Benutzer A: insert into LastID (Reihenfolge, DeineID) values (Gen_ID(GEN_Reihenfolge, 1), XY-1); //XY-1 steht in LastID als letzte ID (Reihenfolge=2). Stimmt nicht!

Am Ende sieht die Tabelle LastID so aus:
Code:
Reihenfolge DeineID
1           XY-2
2           XY-1
So müsste sie aber aussehen:
Code:
Reihenfolge DeineID
1           XY-1
2           XY-2

Geändert von BlueStarHH ( 5. Aug 2022 um 19:49 Uhr)
  Mit Zitat antworten Zitat