Hallo,
ich möchte ein Programm schreiben mit dem mehere User gleichzeitig arbeiten sollen.
Dazu verwende ich D7,
ADO und einen MSSQL2000 Server.
Ich hab mich bereits ein wenig mit Transaktionen in Delphi und
ADO auseinandergesetzt, aber habe keine richtige Lösung für das
Problem des 'Lost Updates' gefunden.
Mein Code für ein Update sieht bislang erstmal so aus:
Delphi-Quellcode:
ADOConnection1.BeginTrans;
try
QKunde.Active:=false;
QKunde.SQL.Clear;
QKunde.SQL.Add('
UPDATE Kunde SET KName1=Hanswurst WHERE KundeID=288');
QKunde.ExecSQL;
ADOConnection1.CommitTrans;
except
on E:
Exception do ADOConnection1.RollbackTrans;
end;
Soweit klappt das Ganze auch ganz gut, im Profiler kann ich die Transaktion verfolgen und ich das Prog zwichendurch abschieße
gibt´s nen feinen RollBack.
Nur wie macht man es richtig das wenn zwei User gleichzeitig in der Kundenmaske sind der eine dem anderen nicht das Update versaut.(Lost Update) Klar ich könnte grundsätzlich den Datensatz sperren und eine Meldung ausgeben, nur ist das nicht so richtig schön finde ich. Ich hatte schon gedacht den kompletten Datensatz in ein Array zu speichern und dann den Inhalt des Array im Moment des Updates mit dem jetzt aktuellen Inhalt zu vergleichen. Würde dann ein Unterschied sein könnte ich ein Rollback auslösen.
Hmm, irgendwie komm ich da nicht wirklich weiter. Ist das überhaupt der richtige Ansatz den ich da habe?
Oder macht das ein schlauer Programmierer ganz anders?
In diesem Sinne, danke schonmal für Eure Hilfe...
Andy