Merkwürdiges Verhalten

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
ErnstVolker
Beiträge: 363
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Merkwürdiges Verhalten

Beitrag von ErnstVolker »

Guten Abend,
ich habe neulich merkwürdiges Verhalten an meiner DB-Anwendung festgestellt. Es werden die ZEOS-Komponenten und Firebird 5 verwendet.

Ich gebe Daten ein, das funktioniert. Soll aus den Daten ein Bericht erstellt werden, dann kommt die Meldung "Operation cannot performed on an inactive dataset". Wenn ich mein Programm beende, etwas Zeit vergehen lasse, mich neu anmelde dann funktioniert die Berichtserstellung.

Man hat den Eindruck als müssten die Daten sich erst noch ihren Platz in der DB suchen.

Muß da an den Einstellungen der Zeos-Komponenten etwas umgestellt werden? Die TZConnection steht auf AutoCommit.

Hat jemand eine Idee? Muß ich mehr und wenn ja, welche Informationen liefern?

Vielen Dank und viele Grüße
Volker

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6922
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Merkwürdiges Verhalten

Beitrag von af0815 »

Das ist normalerweise nicht komisch. Man braucht sich nur den Zustand des Datensets anzusehen. Das wird zu dem Zeitpunkt inaktiv sein. Es ist meistens ein versteckter Logik Fehler, der das Dataset nicht im richtigen Zustand hinterlässt.

Beim neu anmelden aktualisierst das Dataset, deswegen ist der Fehler da weg.

Meistens mühsam zu finden oder blitzschnell mit dem Gedanken - eh klar.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Merkwürdiges Verhalten

Beitrag von MmVisual »

Du kannst, wenn der Fehler kommt, mit
Ansicht > Debugfenster > Aufrufstack
die ganze Aufrufhirarchie sehen und dann heraus finden wo dein letzter bekannter Code ausgeführt wurde, bevor das ganze in die tiefen der vielen Zeos Dateien geht.

Dann programmierst du in der Zeile zuvor einen Test Code in deinen Programm Code:
Var State: TDataSetState;
: : :
Status := query1.State;

damit sicherst du den Status der Query und kannst den im Debugger anschauen.
Schlussendlich kannst du eventuell aus dem Aufrufstack sogar heraus finden wo die Query geschlossen wurde.
EleLa - Elektronik Lagerverwaltung - www.elela.de

charlytango
Beiträge: 1145
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Merkwürdiges Verhalten

Beitrag von charlytango »

Nur so eine Frage: Benutzt du aktive DB Komponenten in der Lazarus GUI?
Anders gefragt: nutzt du eine offene DB Verbindung beim Design?

Ist das der Fall, kann man sich manchmal ins Knie schießen wenn DB-Verbindungen oder Queries in bestimmten Zuständen oder Situationen nicht geöffnet werden.
Das ist einer der Gründe warum ich (und wohl viele hier) das nur mehr im Code machen.
Dann hast du den genauen Zeitpunkt wann etwas passiert unter Kontrolle.

Ist für den aktuellen Fall möglicherweise nicht akut hilfreich, aber vielleicht ein längerfristiger Ansatz

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Merkwürdiges Verhalten

Beitrag von MmVisual »

Nein, natürlich nicht.
Ich habe für jede Query/Ansicht immer eigene Routinen DoOpenXYZ(), diese sorgen jeweils sicher dafür dass die Query auch mit den richtigen Filtern auf Datensätze geöffnet werden und je nach SQL Server wird hier der SQL Syntax entsprechend richtig gesetzt.
Meine DB hat über 20 Tabellen und sehr viel mehr Queries für die angzen Ansichten. Sehr viele Funktionen werden mehrfach genutzt mit der Sender Eigenschaft kann man das gut machen um nicht hundertfach das gleiche zu programmieren. Es braucht natürlich eine gewisse Displizin und Ordnung im Code. Immer wenn ich dann mal feststelle dass Code nicht optimal ist oder mehrfach vorhanden so schreibe ich das um, wenn es mehr Sinn macht. Jedenfalls hat mir dieses Vorgehen in den Letzten 15 Jahren enorm viel Zeit gespart.
Du siehst ja meinen Link hier, da gibt es eine Gallerie auf meiner Homepage.
EleLa - Elektronik Lagerverwaltung - www.elela.de

charlytango
Beiträge: 1145
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Merkwürdiges Verhalten

Beitrag von charlytango »

Eigentlich hab ich den Ersteller des Threads gemeint ;-)

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Merkwürdiges Verhalten

Beitrag von MmVisual »

Stimmt, ich war gedanklich bei einem anderen Thread ... jetzt kann das der Fragesteller auch als Tipp sehen. :D
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten