Hallo!
Wenn es Dir wirklich nur darum geht, Doppeleingaben zu verhindern, dann ist ein zuverlässiges Record-Locking wahrscheinlich die beste Lösung - dann jedoch sind alle Deine Fragen, was in bestimmten Problemfällen passiert, separat zu behandeln ... Du kannst innerhalb des Semaphors beispielsweise eine Session-ID speichern, welche bei nachfolgenden Zugriffen auf das gesperrte Objekt ebenfalls abgefragt wird, so daß ein Prozeß erkennen kann, daß ihm sein Semaphor von der Ablaufsteuerung gewaltsam entzogen wurde (timeout etc.).
Genau das ist es. Ich hatte gehofft es gäbe dann doch noch eine schönere Lösung aber anscheinend nicht. Doppeleingaben darf es nicht geben. Z.B. bei einer Artikel-Tabelle, wenn ich da was dran ändere, darf Gustav das nicht überschreiben. ich könnte zwar prüfen welche Felder aktualisiert werden und Gustav darf dann halt nur die andeen Felder bearbeiten, aber as ist auch nicht wirklich schön, zumal sich das erst am Ende feststellen lässt udn Gustav so viewlleicht schon eine andere Angabe für dasselbe Feld gemacht hat, aber noch nicht gespeichert.
Du haeltst hier Vortraege ueber Transaktionen und deren Implikationen, waehrend der Mann doch einfach nur sicherstellen moechte, dass Aenderungen an bestimmten Datensaetzen auf eine Art und Weise geschehen, die "beabsichtigt" ist. Also, wenn wir spekulieren, dann vielleicht eine "pessimistische" Herangehensweise.
Es ist ja auch eine Transaktion. Nur kann ich eben keien Transaktion auf RDBMS-Level verwenden. Da wünschte ich mir jetzt wirder einen Applikationsserver mit Java, da gibt es für sowas glaube ich schon fertige Lösungen. Jetzt ernet ich halt die Früchte dere Entscheidung für PHP, naja, aber so scher ist es ja nicht, Du hattest schon Recht am Anfang. Ich werde bei dem Datensatz ein Flag einfügen, dazu einen Timestamp und den Username. Dann weiß ich immer ob meine Transaktion abgebrochen wurde. Nur weiß ich noch nicht genau wie ich das in die Anwendung einbaue. Was soll passieren wenn der Timeout abgelaufen ist? Soll ich erst bei eine neuen ZUgriff durch eine andere Person nach 20 Minuten die Transaktion einfach abbrechen, oder kann ich davor irgendwie den 1. Anwender kontaktieren dass der entscheiden kann ob verworfen oder gespeichert wird? Ich könnte ja sogar in die Session gucken ob der schon Änderungen gemacht hat, das wäre kein Problem.
Nur wernn ich jetzt sowas mache - dann muss der 2. Anwender erst warten bis der erste reagiert hat, das ist ja auch irgendwie blöd.
Oder ich lade nach dem Timeout ein Javascript welches ein Confirm-Fenster öffent in dem gefragt wird ob die Daten gesoeichert werden sollen und ein neue "Transaktion" gestartet werden soll...
Was meint Ihr?
Viele Grüße
Andreas