Forum: Datenbanken
Delphi
by mjustin,
24. Apr 2017
Ja, die Prüfung kann wieder heraus, sie stammte noch aus der Zeit einige Minuten vor der Aufklärung des Phänomens.
Vielen Dank für die Anregungen und Tips!
Forum: Datenbanken
Delphi
by mjustin,
24. Apr 2017
Ja, eine Retry-Schleife ist dem sicher vorzuziehen. Leider sind davon mehrere Anwendungen betroffen, zum Teil laufen die auf Hintergrund-Servern ohne Oberfläche. :roll:
Forum: Datenbanken
Delphi
by mjustin,
24. Apr 2017
Das Insert ist im Detail, der Master wird nur in irgendeinem Feld (nicht dem PK) geändert. Daher sollte ein ROLLBACK eines Updates der Mastertabelle kein INSERT im Client blockieren.
Natürlich könnte in der selben Transaktion, die das Update im Master vornimmt, auch ein DELETE des Master-Satzes stattfinden und nach dem COMMIT der Satz für andere Transaktionen unsichtbar werden. Beim...
Forum: Datenbanken
Delphi
by mjustin,
24. Apr 2017
Also so etwas :)
Es ist reproduzierbar:
* ich starte in einem Datenbankclient eine Transaktion, ändere einen Wert (natürlich nicht den PK!) im Master, aber führe kein COMMIT durch
* ich führe im Programm (andere Transaktion) das INSERT in der Detail-Tabelle aus
* und: die Fehlermeldung erscheint
Schlussfolgerung: Detail-INSERTs sind nur bei geschlossenen Transaktionen auf den MASTER...
Forum: Datenbanken
Delphi
by mjustin,
24. Apr 2017
Da multi-user, fliegen einige andere Anweisungen rum. Die sind in anderen Prozessen, im aktuelle Prozess laufen keine Threads o.ä. mit Datenbankzugriff. Als weitere Absicherung prüft das Programm vor dem INSERT, ob der als FK einzutragende Wert tatsächlich in der MASTER Tabelle "sichtbar" ist (existiert).
In 99,9 Prozent aller Fälle funktioniert das INSERT. Einen Fehler im Statement kann ich...
Forum: Datenbanken
Delphi
by mjustin,
24. Apr 2017
Die INSERTS sind in verschiedenen Transaktionen, der MASTER wird zeitlich lange vor dem DETAIL erzeugt und comitted. Der Client sieht den Master (z.B. wird er in einem DBGrid selektiert), der Benutzer startet per Knopfdruck das Detail-Insert. (Leere / Null FK Werte werden abgefangen). Isolationslevel ist READ COMITTED.