Autor Beitrag
sandy99
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 03.12.12 14:28 
Hallo,

Mit diesem Methode erhöhe ich den Zähler in einer Tabelle um 1.

ausblenden 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 user profile iconMartok: Delphi-Tags hinzugefügt
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 03.12.12 14:32 
Wie das genau bei ZEOS und MySQL geht weiß ich nicht. Aber generell musst Du Dich mal in das Konzept der Transaktionen einlesen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 09.12.12 23: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

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 10.12.12 07: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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 11.12.12 11:28 
vielen Dank für die Antworten,
habe es mit Autoincrement gelöst.

Gruß Sandy