AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird: Datensatz wird nicht gefunden, obwohl er da ist

Firebird: Datensatz wird nicht gefunden, obwohl er da ist

Ein Thema von BlueStarHH · begonnen am 28. Mär 2018 · letzter Beitrag vom 29. Mär 2018
Antwort Antwort
Seite 3 von 4     123 4   
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
532 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 28. Mär 2018, 21:31
Das Datenmodell sagt dazu klar nein.

Allein wenn du die alte Rechnung rauslöscht während sie auf der GUI angezeigt wird tritt der Fehler auf. Das AutoCommit sorgt dafür.

Offensichtlich wird die Rechnung angelegt ohne ErsetztRgNr. Dann die alte Rechnung löschen und die zu ersetzende Rechnung manuell eintragen? Klingt verwegen. Die werden die ersetzt die Rechnung nicht mit der Hand reinpfrimmeln

Wohl aber kann man über 2 Sessions arbeiten, bspw. das Programm 2 Mal starten, in einem die Verlinkung auf der GUI herstellen und den alten Satz noch kurz vor dem Post rauslöschen. Den hat die Sperre vermutlich mal nicht im Visier. Ein allfälliger Dialog ist zu dem Zeitpunkt schon geschlossen.

Allein für den Fall, dass du den alten Datensatz rauslöscht in einer Session (nicht commitest) und in der zweiten die Verbindung über den Foreign Key versuchst herzustellen kommt die Meldung mit dem Deadlock.

Hallo,
ALTER TABLE Rechnungen ADD CONSTRAINT FK_Rechnungen_1 FOREIGN KEY (ErsetztRgNr) REFERENCES Rechnungen (RgNr);

ErsetztRgNr zeigt also auf ein in der Tabelle Rechnungen vorhandene RgNr.
Kann das sein, dass "ersetzt" heißt, dass die alte Rechnung gelöscht wird?
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 28. Mär 2018, 21:47
Hallo,
ALTER TABLE Rechnungen ADD CONSTRAINT FK_Rechnungen_1 FOREIGN KEY (ErsetztRgNr) REFERENCES Rechnungen (RgNr);

ErsetztRgNr zeigt also auf ein in der Tabelle Rechnungen vorhandene RgNr.
Kann das sein, dass "ersetzt" heißt, dass die alte Rechnung gelöscht wird?
Die alte Rechnung wird nicht gelöscht und ist auch noch da. Alle Datensätze sind vorhanden. Sie könnten auch nicht gelöscht und wieder angelegt werden, da der Generator dann um eins weiter ist und die Rechnungsnummer sich erhöht hätte.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 28. Mär 2018, 21:49
Wohl aber kann man über 2 Sessions arbeiten, bspw. das Programm 2 Mal starten, in einem die Verlinkung auf der GUI herstellen und den alten Satz noch kurz vor dem Post rauslöschen. Den hat die Sperre vermutlich mal nicht im Visier. Ein allfälliger Dialog ist zu dem Zeitpunkt schon geschlossen.
Auf einem PC kann das Programm nur 1x gestartet werden. Eine zweite Session vom selben Anwender auf dem selben PC ist damit nicht möglich.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 28. Mär 2018, 21:51
Die Aussage: Das zeigt jetzt die Rechnung 4. Zum Zeitpunkt des Fehlers habe ich das nicht abgefragt. Die Rechnung 4 wurde aber im DB Grid zum Fehlerzeitpunkt angezeigt.

Heißt auch, dass die Rechnung gelöscht gewesen sein könnte.
Gerade nochmal gecheckt: die Rechnung 4 ist momentan da. Sie kann auch nicht gelöscht und wieder angelegt werden, da der Generator dann um eins weiter ist und die Rechnungsnummer sich erhöht hätte. Die wäre dann nicht mehr auf 4 und es gäbe eine Lücke.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 29. Mär 2018, 00:18
Tja,
das zeigt mir wieder,
in etwas aufwändigeren Scenarien sind DB-sensitive GUI-Elemente völlig fehl am Platz.

Du kannst das nur versuchen, anhand der Kunden-Infos den Vorgang nachzuvollziehen.
Nimm zur Not 2 Rechner.

Viel Glück.

Willkommen im Club.
Heiko
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
532 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 29. Mär 2018, 09:18
Danke.

Dann bleibt mal allein im DB Monitor die statements rauszufahren die zu dem Zeitpunkt abgesetzt werden.

Außer du hättest mal IBDAC upgedated auf genau eine Version in der zumindest ähnliches Verhalten wurde beim Support gemeldet, aber nicht gleich. Das war beim Sprung von 5.4.12 auf 5.4.13 Support Forum Devart

Besonders die Sache mit der Notiz kommt mir seltsam vor. Es wäre gut zu wissen, selbst wenn der Fehler nicht mehr auftritt, was es am Ende war.

Die Aussage: Das zeigt jetzt die Rechnung 4. Zum Zeitpunkt des Fehlers habe ich das nicht abgefragt. Die Rechnung 4 wurde aber im DB Grid zum Fehlerzeitpunkt angezeigt.

Heißt auch, dass die Rechnung gelöscht gewesen sein könnte.
Gerade nochmal gecheckt: die Rechnung 4 ist momentan da. Sie kann auch nicht gelöscht und wieder angelegt werden, da der Generator dann um eins weiter ist und die Rechnungsnummer sich erhöht hätte. Die wäre dann nicht mehr auf 4 und es gäbe eine Lücke.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 29. Mär 2018, 09:30
Hat die Applikation in der Meldung vor der jener die du anführtest deadlock angegeben?

Engine Code : 335544336
Engine Message :
deadlock
violation of FOREIGN KEY constraint "FK_RECHNUNGEN_1" on table "RECHNUNGEN"
Foreign key reference target does not exist
Problematic key value is ("ERSETZTRGNR" = '11')

nicht ausgegeben. Das wäre der Fall dass eine Benutzer die Rechnung löscht und in einer zweiten Transaktion versucht die Rechnung in ERSETZRGNR einzutragen. Das dürft ob des AutoCommits nicht passieren.
Ob da noch deadlock am Anfang der Meldung stand oder nicht kann ich nicht mit Sicherheit sagen. Ich werde dazu mal ein Log-Mechanismus einbauen, der diese Meldungen in eine Log-Datei schreibt. Dann geht man nicht in Gefahr, dass die Anwender einen Teil der Meldung unterschlagen.

Kann es den wirklich vorkommen, dass der Meldungstext "deadlock" noch um weitere Details ergänzt wird? In der Doku steht, dass bei Fehler 335544336 nur der Text "deadlock" ausgegeben wird. Mehr Text habe ich bei deadlocks bei anderen Fällen in der Vergangenheit auch noch nie gesehen.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 29. Mär 2018, 09:32
Offensichtlich wird die Rechnung angelegt ohne ErsetztRgNr. Dann die alte Rechnung löschen und die zu ersetzende Rechnung manuell eintragen? Klingt verwegen. Die werden die ersetzt die Rechnung nicht mit der Hand reinpfrimmeln
Im ersten Schritt wird die Rechnung, die ersetzt werden soll, im DB Grid ausgewählt. Dann wird ein Button geklickt. Dort wird sich die ausgewählte Rechnungsnummer gemerkt. Anschließend wird die neue Rechnung angelegt und die gemerkte Rechnungsnummer in deren Feld ERSETZTRGNR geschrieben.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 29. Mär 2018, 09:38
Dann bleibt mal allein im DB Monitor die statements rauszufahren die zu dem Zeitpunkt abgesetzt werden.
Da jetzt ja nach dem Neustart alles wieder funktioniert, mach es wenig Sinn es sich jetzt anzuschauen? Ich müsste dann wohl nochmal auf den Fehler warten? Hast Du einen Link zum Thema "DB Monitor"? Denn das sagt mir leider gar nichts.

Außer du hättest mal IBDAC upgedated auf genau eine Version in der zumindest ähnliches Verhalten wurde beim Support gemeldet, aber nicht gleich. Das war beim Sprung von 5.4.12 auf 5.4.13 Support Forum Devart
Ich werde demnächst das Updat auf die aktuelle Version kaufen. Dann sehen wir mal weiter.

Besonders die Sache mit der Notiz kommt mir seltsam vor. Es wäre gut zu wissen, selbst wenn der Fehler nicht mehr auftritt, was es am Ende war.
Wenn das nochmal auftritt oder ich Erkenntnisse habe, werde ich das auf jeden Fall hier berichten. Denn sowas ist schon komisch und darf nicht passieren.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
642 Beiträge
 
FreePascal / Lazarus
 
#30

AW: Firebird: Datensatz wird nicht gefunden, obwohl er da ist

  Alt 29. Mär 2018, 10:05
Monitoring der eigenen Statements sollte IBDAC können, viel effektiver wäre es aber zum Beispiel, den weg zum Fehler serverseitig zu finden, wenn
mehr als ein Client beteiligt ist. Trace geht auch mit dem Lieferumfang von firebird >=2.5, aber ist evtl. komfortabler in anderen Tools, z.B.
http://www.ibexpert.net/IBE/INDEX.PH....TraceAndAudit
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz