Andreas Korthaus: überschreiben von Änderungen vermeiden

Beitrag lesen

Hi Michael!

Genau. Du solltest alle Daten der Transaktion inkrementell aufsammeln (Session!) und die eigentliche Änderung in der Datenbank erst dann starten, wenn Du alles in einem Rutsch durchführen kannst.

Ja, genau so mache ich es bereits. Das Problem liegt wo anders. Wenn jemand einen Datensatz zum bearbeiten aufruft, ab diesem Moment darf das niemand anders mehr machen können, denn sonst hötten 2 Leute dieselben Daten und würde aber evtl. verschiedene Änderungen vornehmen udn sich gegenseitig überschreiben. Also Transaktion, aber was heißt das jetzt genau? Eigentlich ist es einfach. Anwender 1 öffnet die Daten zum bearbeiten, die Daten werden mit einem Flag versehen, so dass niemand anderes mehr drankommt. Jetzt macht Nawender 1 diese und jene Änderung, und speichert am Ende, das Flag wird wieder zurückgesetzt und jeder andere kann jetzt diese Daten bearbeiten. Nur - was ist wenn Anwender 1 die Daten bearbeiten will, daber aber ein Problem auftaucht, er weiß nicht was er in ein Feld schreiben soll, ruft irgendwo an... und ist 2 Stunden beschäftigt bis er endlich weiß was jetz genau da hin soll. Was soll dann passieren? Sollen jetz alle anderen 2 Stunden warten müssen? Und wenn es denn einen Timeout von 15 Minuten gibt - was passiert dann mit den Daten von Anwender 1 die er ja bereits eingegeben hat? Was passiert wenn er nach 2 Stunden, also 1 3/4 Stunden über das Limit kommt und abschickt? Die Daten alle weg?

Dann greift das Transaktionskonzept, und Dein Problem ist gelöst.

Wenn das so einfach wäre...

Und Du mußt in diesem Moment immer noch darauf achten, daß Dir inzwischen die Grundlagen für diese Transaktion entzogen worden sein können, weil jemand anderes weniger als 10 Minuten brauchte, um eine Änderung einzugeben.

Ja, aber das will ich auch nicht. Wenn Anwender 1 Daten eingibt, soll Anwender 2 eine Fehlermeldung erhalten und nicht ebenfalls Daten eingeben können, denn sonst würden beide parallel Daten eingeben, und  einer davon wird das auf jeden Fall um sonst gemacht haben, das ist sehr ärgerlich. Fände ich zumindest.

Löse Dich von der Idee, Deine SQL-Statements auf mehrere Skripte zu verteilen - genau hier liegt Dein Problem.

Das habe ich nie gemacht, ich habe eine Session in die alles reingeschreiben wird, am Ende eien Statusseite wo alle Eingaben kontrolliert werden, und dann einen "Speichern"-Button.

Viele Grüße
Andreas