2016-12-23 5 views
0

Meine Anwendung wurde unter Delphi XE5 + Firebird-2.5.6, Client/Server codiert. ZeosLib.Lokale Firebird-Tabellenbearbeitung

Wenn ich einen Datensatz wie folgt bearbeiten möchten:

ZTable1.Edit; 
ZTable1.FieldValues['champ1'] := Edit1.Text; 
ZTable1.Post; 

Ich wollte wissen, ob dieser Code auf dem lokalen Netzwerk, es Sorgen oder einen Konflikt der Bearbeitung haben könnte und poste bitte? Das heißt, die Bearbeitung der Tabelle durch mehrere Benutzer hat nicht einmal Auswirkungen oder eine Fehlermeldung, die bei diesen Benutzern auftaucht. Wenn ja, wie kann man diese Unannehmlichkeit vermeiden?

Vielen Dank für Ihre Hilfe.

+1

Angenommen, Benutzer A hat einen Datensatz auf dem Bildschirm geöffnet, und mitten in der Bearbeitung geht es zum Mittagessen. Während A zum Mittagessen ist, sollte Benutzer B in der Lage sein, denselben Datensatz zu bearbeiten und Änderungen daran zu speichern? Wenn ja, was sollte passieren, wenn A seine Arbeit wieder aufnimmt? (Dies ist so viel über Geschäftslogik als db Transaktionsverarbeitung) – MartynA

+0

Scheint mir, Sie könnten dies herausfinden, einfach durch Ausführen von zwei Kopien Ihrer Anwendung, nein? –

+0

Die Bearbeitung wirkt sich nicht auf die Datenbank aus, nur die Post. Die 3 Zeilen werden sehr schnell ohne Verzögerung ausgeführt. Die Wahrscheinlichkeit eines Sperrkonflikts auf der Post selbst bei Dutzenden von Benutzern ist sehr unwahrscheinlich. Wann erhält der Benutzer die Möglichkeit, Werte in Edit1 einzugeben? – nolaspeaker

Antwort

0

Es hängt von der Aktion mit diesem Datensatz ab, die den anderen Benutzer und wie lange Ihre Transaktion aktiv sein wird.

Für lesenden oder nach Ihrer Transaktion Commit oder Rollback wird zum Bearbeiten oder Löschen des Datensatzes eines anderen Benutzers kein Konflikt

Vor einer Transaktion Ende sein, um eine Nachricht sperren kann oder wenn ein Benutzer Transaktion mit no_wait Flag gestartet wird, wartet bearbeitete Transaktionsvervollständigung

PS Zeos für Firebird ist eine sehr schwierige Wahl. Warum verwenden Sie nicht die Standard-IBX-Bibliothek?

+0

Hallo, Die ZConnection-Komponente ist Autocommit. Also handhabt Zeos die Transaktionen. Für die Ausführungszeit hängt das Halten vom Benutzer ab: Es kann 10 Sekunden dauern, wie es 1 Minute oder mehr dauern kann. Ich habe mit Zeos gearbeitet, weil ich damit gearbeitet habe. –

+0

@Bill "Autocommit" entspricht "ExecSQL; Commit ". Zwischen diesem Vorgang ist der Datensatz gesperrt. Vor dem 'Post'-Server weiß nichts über das Bearbeiten des Datensatzes. Führen Sie zwei Instanzen Ihrer Anwendung aus und versuchen Sie, denselben Datensatz zu bearbeiten –