Entwickler-Ecke
Datenbanken - Vergabe von doppelten Nummer verhindern.
sandy99 - Mo 03.12.12 13:28
Titel: Vergabe von doppelten Nummer verhindern.
Hallo,
Mit diesem Methode erhöhe ich den Zähler in einer Tabelle um 1.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| ZQTabelle.Active := false; ZQTabelle.Sql.Clear; ZQTabelle.Sql.Add('UPDATE tabelle a'); ZQTabelle.Sql.Add('INNER JOIN tabelle b ON b.key1 = a.key1'); ZQTabelle.Sql.Add('SET a.lfnr = b.lfnr + 1'); ZQTabelle.Sql.Add('WHERE a.key1 = "ZAEHLER"'); ZQTabelle.ExecSQL; |
MySQL 5.1 mit Zeos 6.6 in Delphi 5
Da ein zeitgleicher Zugriff auf diese Tabelle erfolgen kann habe ich mich
für diese Möglichkeit entschieden, Update mit Join gekapselt.
Um jetzt aber mit der neuen Nummer in meinem Programm arbeiten zu können müsste ich wieder
einen Select ausführen.
Genau hier ist das Probleme !
Wenn zwischen dem Update,Join und dem anschließenden Select könnte ein zweiter Zugriff erfolgen und
ich würde eine falsche Nummer bekommen.
Gibt es eine Möglichkeit in der gekapselten Ausführung (Update, Join) den Set-Wert zu exportieren ?
Gruß Sandy
Moderiert von
Martok: Delphi-Tags hinzugefügt
Nersgatt - Mo 03.12.12 13:32
Wie das genau bei ZEOS und MySQL geht weiß ich nicht. Aber generell musst Du Dich mal in das Konzept der Transaktionen einlesen.
Narses - So 09.12.12 22:17
Moin!
Ich mag mich täuschen, aber ist das nicht auf den ersten Blick genau der Zweck von einer Autoincrement-Spalte? Einfach eine Zeile einfügen und den vergebenen AutoInc-Value wieder von der API lesen. :idea: :nixweiss:
cu
Narses
jaenicke - Mo 10.12.12 06:37
Das geht auch alles innerhalb einer Abfrage, die du kombinieren kannst, also das Auslesen des Wertes in eine Variable und die Weiterverarbeitung. Und wenn Autoincrement alleine nicht reicht, kannst du die Tabelle(n) auch mit LOCK sperren, die Anfragen (semikolon-separiert, bei dir fehlt auch das abschließende Semikolon) durchjagen, und die Tabelle(n) mit UNLOCK wieder entsperren.
Das geht natürlich auf die Performance, lässt sich aber z.B. bei unserem Browsergame nicht vermeiden, da läuft das auch in der Kombination, und das nach Optimierungen auch sehr fix.
sandy99 - Di 11.12.12 10:28
vielen Dank für die Antworten,
habe es mit Autoincrement gelöst.
Gruß Sandy
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!