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
Merkwürdiges Verhalten
-
- 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
- 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
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.
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).
-
- 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
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.
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
-
- Beiträge: 1146
- 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
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
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
-
- 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
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.
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
-
- Beiträge: 1146
- 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
Eigentlich hab ich den Ersteller des Threads gemeint 

-
- 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
Stimmt, ich war gedanklich bei einem anderen Thread ... jetzt kann das der Fragesteller auch als Tipp sehen. 

EleLa - Elektronik Lagerverwaltung - www.elela.de