In meiner kleinen Delphi 2005/Firebird 2.03 / IBX / Anwendung arbeiten zwei Personen gleichzeitig mit dem Programm. Wobei Person 1 Daten eigentlich nur ansieht, und Person 2 permanent Daten hinzufügt. Es kann jedoch passieren, dass auch Person 1 Daten verändert. Da die Vorgänge manchmal komplex sind, sind diese Änderungs-Routinen mit try finally ausgestattet, wobei im Fehlerfall dort ein Rollback durchgeführt wird.
Ich bin in der DB-Programmierung noch ein Anfänger, und überlege gerade was des beste Weg ist, damit dem Anwender 1 relativ aktuelle Daten angezeigt werden. Alle Routinen die zum Anzeigen der aktuellen Daten nötig sind habe ich in der Prozedur "sqlupdate" gekapselt, hier wird jedoch auch ein commit aufgerufen, und alle Änderungen in die Datenbank geschrieben. Es wäre ausreichend, wenn alle 10 Minuten die Anzeige aktualisiert wird.
Mein Lösungsansatz:
Mittels application.onidle wird geprüft, ob 10 Minuten vergangen sind. Wenn dies der Fall ist, wird sqlupdate aufgerufen.
Meine Fragen zu dieser Lösung:
Die Delphi Hilfe zu onidle ist spärlich, und ich bin nicht zu 100% sicher, dass OnIdle wirklich nur dann aufgerufen wird, wenn das Programm gerade in keiner (!!) Routine steckt, und z.B. auf einen Mausklick wartet. Weil dann wäre ein SQLUpdate fatal: Wenn Anwender 1 gerade eine Veränderung der Daten durchführt, welche jedoch Fehlerhaft sind und ein Rollback am Ende durchgeführt werden soll. Würde nämlich dazwischen ein SQLUpdate durchgeführt werden, wäre das Rollback wirkungslos, und die Daten in der DB mehr oder weniger inkonsistent.