Deadlock-Fehler
Bei einem Schreibbefehl auf einen Datenbank-Transaktion erhält die Datenbank-Zeile einen Deadlock. Der Deadlock wird nach Abschluss der Transaktion wieder aufgehoben. Wird während des Deadlocks ein weiterer Schreibbefehl auf den Datenbank-Eintrag ausgeführt, wird ein Deadlock-Fehler ausgegeben. Der Fehler entsteht somit auf der Datenbank.
Die umgesetzten Lösungen können lediglich versuchen, Schreibbefehle auf die Datenbank zu minimieren und ein entsprechendes Fehler-Handling anzubieten. Die Gentable-Funktion "gentable.insertIntoDB()" schreibt zum Beispiel die Rechnungs-Positionen in die Tabelle "invoice_posting_pos". Die Funktion wird bei jedem Speichern einmalig ausgeführt. Die Datenbank-Tabelle
Gerade im Rechnungs-Workflow bei Rechnungen mit Bestelltbezug sind
Es folgt eine Beispiel-Fehlerausgabe eines MS SQL-Servers. Als Lösung schlägt der SQL-Server vor, die Transaktion erneut auszuführen.
ReturnCode: -1
SqlState: 40001
NativeError: 1205
ErrorMsg: [Microsoft][ODBC SQL Server Driver][SQL Server]Transaction (Process ID 92) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
.. this.Result:=false
Ab der Invoice-Version 2.0.200 wird dieser Vorschlag befolgt.