Datenbankzugriff in Lazarus - eine Odyssee!?
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Die "Access violation" beim Wechsel von SQLite3Connection1.Connected true auf false im Designmode kommt bei mir unter Windows auch. Das sieht mir eher nach einem Bug aus. Nachdem die DB-Hauptentwickler aus dem FPC-Lager stammen und wenig im Designmode mit Lazarus arbeiten, liegt da noch einiges im Argen. Du müsstest einmal die Bugreports durchsuchen, evtl. ist das schon gemeldet. Andernfalls solltest du einen Bug-Report schreiben.
Lazarus-Bugreports: https://gitlab.com/freepascal.org/lazar ... s/-/issues
FPC-Bugreports: https://gitlab.com/freepascal.org/fpc/source/-/issues
Nach einer Access-Violation der IDE die IDE beenden und neu starten. Am besten nichts speichern, evtl. machst du dir dabei das Projekt kaputt.
Und noch ein Tipp:
Es ist ratsam, ein Projekt nur vorübergehend mit aktiven Datasets und aktiver Connection zu bearbeiten. es ist besser, den Pfad zur Datenbank aus der Connection zu entfernen und erst zur Laufzeit zu setzen, denn wenn der Pfad plötzlich nicht mehr stimmt, kannst du schlimmstenfalls das Projekt nicht mehr laden. So geschehen mit mir, weil es deinen Pfad auf meinem System natürlich nicht gibt. Erst nach manuellem Editieren der lfm-Datei konnte ich das Projekt laden.
Wenn man sich nun denkt, dann speichere ich den Pfad im Designmode relativ ab, kommt das nächste Problem. Denn zur Designzeit ist der Pfad relativ zur IDE, zur Laufzeit relativ zur Anwendung. Die Datenbank-Datei liegt aber relativ zur Anwendung.
Lazarus-Bugreports: https://gitlab.com/freepascal.org/lazar ... s/-/issues
FPC-Bugreports: https://gitlab.com/freepascal.org/fpc/source/-/issues
Nach einer Access-Violation der IDE die IDE beenden und neu starten. Am besten nichts speichern, evtl. machst du dir dabei das Projekt kaputt.
Und noch ein Tipp:
Es ist ratsam, ein Projekt nur vorübergehend mit aktiven Datasets und aktiver Connection zu bearbeiten. es ist besser, den Pfad zur Datenbank aus der Connection zu entfernen und erst zur Laufzeit zu setzen, denn wenn der Pfad plötzlich nicht mehr stimmt, kannst du schlimmstenfalls das Projekt nicht mehr laden. So geschehen mit mir, weil es deinen Pfad auf meinem System natürlich nicht gibt. Erst nach manuellem Editieren der lfm-Datei konnte ich das Projekt laden.
Wenn man sich nun denkt, dann speichere ich den Pfad im Designmode relativ ab, kommt das nächste Problem. Denn zur Designzeit ist der Pfad relativ zur IDE, zur Laufzeit relativ zur Anwendung. Die Datenbank-Datei liegt aber relativ zur Anwendung.
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Siehe dazu auch noch mal hier. Seit dieser Änderung habe ich keine Access Violations mehr, und es verhindert gleichzeitig auch die beschriebenen Ladeprobleme.
-
- Beiträge: 35
- Registriert: Sa 4. Dez 2021, 11:43
- OS, Lazarus, FPC: Windows 10 / Ubuntu 20.04 LTS (L 2.0.12 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Bleibt diese Ableitung gerade bei Nutzung der grafischen Komponenten stets aktiv, d.h. die Eigenschaft Connect lässt sich tatsächlich nur während des Entwurfs auf Aktiv setzen?
Oder müsste ich vollends auf die grafischen Komponenten für den Datenbankzugriff verzichten und alles komplett von Hand entsprechend codieren?
Aber das Problem des Commits, der anstelle des Festschreibens der Änderungen schlicht die Verbindung zur Datenbank kommentarlos kappt, bleibt, oder hat hier jemand mit dem beigefügten Beispiel andere Erfahrungen?
-
- Beiträge: 35
- Registriert: Sa 4. Dez 2021, 11:43
- OS, Lazarus, FPC: Windows 10 / Ubuntu 20.04 LTS (L 2.0.12 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Ich bin "Gelegenheitsentwickler" und alter Delphi7-Nutzer. Da muss ich mal schauen, ob das sofern das noch nicht reported wurde, ordentlich hinbekomme.wp_xyz hat geschrieben: So 9. Jan 2022, 19:14 Die "Access violation" beim Wechsel von SQLite3Connection1.Connected true auf false im Designmode kommt bei mir unter Windows auch. Das sieht mir eher nach einem Bug aus. Nachdem die DB-Hauptentwickler aus dem FPC-Lager stammen und wenig im Designmode mit Lazarus arbeiten, liegt da noch einiges im Argen. Du müsstest einmal die Bugreports durchsuchen, evtl. ist das schon gemeldet. Andernfalls solltest du einen Bug-Report schreiben.
Lazarus-Bugreports: https://gitlab.com/freepascal.org/lazar ... s/-/issues
FPC-Bugreports: https://gitlab.com/freepascal.org/fpc/source/-/issues
Nun ja, mir ist auch aufgegangen, dass die in Lazarus angebotene Lösung zur plattformübergreifenden Entwicklung für absolute als auch relative Pfade sich wohl auf die nicht-grafische Entwicklung beschränkt. Das dürfte so ziemlich jede grafische Komponenten betreffen, die Eigenschaften bereithält, die zur Entwurfszeit Pfade aufnehmen.wp_xyz hat geschrieben: So 9. Jan 2022, 19:14 Es ist ratsam, ein Projekt nur vorübergehend mit aktiven Datasets und aktiver Connection zu bearbeiten. es ist besser, den Pfad zur Datenbank aus der Connection zu entfernen und erst zur Laufzeit zu setzen, denn wenn der Pfad plötzlich nicht mehr stimmt, kannst du schlimmstenfalls das Projekt nicht mehr laden. So geschehen mit mir, weil es deinen Pfad auf meinem System natürlich nicht gibt. Erst nach manuellem Editieren der lfm-Datei konnte ich das Projekt laden.
Wenn man sich nun denkt, dann speichere ich den Pfad im Designmode relativ ab, kommt das nächste Problem. Denn zur Designzeit ist der Pfad relativ zur IDE, zur Laufzeit relativ zur Anwendung. Die Datenbank-Datei liegt aber relativ zur Anwendung.
- af0815
- Lazarusforum e. V.
- Beiträge: 6790
- 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: Datenbankzugriff in Lazarus - eine Odyssee!?
Es ist eine Gewöhnungssache. Bei DB verwende ich in der grafischen Entwicklung sehr wohl auch absolute Pfade - ABER die Komponenten MÜSSEN nach der grafischen Entwicklung deaktiviert werden. Daher zum Start der Applikation ist die DB Komponente inaktiv. Genaugenommen tausche ich die bei mir immer zur Laufzeit gegen eine dynamisch Erzeugte, richtig parametrierte Verbindung aus.Michel hat geschrieben: Mo 10. Jan 2022, 10:08 Nun ja, mir ist auch aufgegangen, dass die in Lazarus angebotene Lösung zur plattformübergreifenden Entwicklung für absolute als auch relative Pfade sich wohl auf die nicht-grafische Entwicklung beschränkt. Das dürfte so ziemlich jede grafische Komponenten betreffen, die Eigenschaften bereithält, die zur Entwurfszeit Pfade aufnehmen.
Damit ist für mich das Crosscompiling leichter. Ich arbeite unter Win10/64 und die Programme müssen unter Win/Ubuntu/Debian/Raspian laufen. Daher habe ich mir so ein 'sicheres' System geschaffen. Ausserdem gibt es bei mir nur eine automatisch erzeugte Form und diese erzeugt alles andere, damit weis ich auch genau die Lebenszeit der Objekte und Formulare von der Wiege bis zur Bahre.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 35
- Registriert: Sa 4. Dez 2021, 11:43
- OS, Lazarus, FPC: Windows 10 / Ubuntu 20.04 LTS (L 2.0.12 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Nun ja, auch unter Delphi war es für mich normal vor dem Rollout alle DB-Komponenten zunächst grundsätzlich zu deaktivieren, da der ein oder andere Wert eben nicht statischer sondern dynamischer Natur ist. Aber in der Entwicklungs- und Testphase sind es ja genau die voreingestellten statischen "Testwerte", die zunächst einmal aktiviert bleiben, um hier nicht immer wieder über dynamische Effekte zu stolpern. Aber, OK, wenn ich weiß woran es hapert und ich nicht einfach nur zu deppert bin, hilft das auch ein wenig.af0815 hat geschrieben: Mo 10. Jan 2022, 13:18 Damit ist für mich das Crosscompiling leichter. Ich arbeite unter Win10/64 und die Programme müssen unter Win/Ubuntu/Debian/Raspian laufen. Daher habe ich mir so ein 'sicheres' System geschaffen. Ausserdem gibt es bei mir nur eine automatisch erzeugte Form und diese erzeugt alles andere, damit weis ich auch genau die Lebenszeit der Objekte und Formulare von der Wiege bis zur Bahre.
- af0815
- Lazarusforum e. V.
- Beiträge: 6790
- 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: Datenbankzugriff in Lazarus - eine Odyssee!?
Lazarus ist nicht Delphi. Lazarus und FPC sind in großen Teilen mit Delphi kompatibel - aber nur in großenMichel hat geschrieben: Mo 10. Jan 2022, 14:04 Aber, OK, wenn ich weiß woran es hapert und ich nicht einfach nur zu deppert bin, hilft das auch ein wenig.

Ganz schlimm wird es, wennst du nicht von Anfang an ein Projekt Multiplattform machst, können dich die Kleinigkeiten ziemlich ärgern. Und wenn es nur die LineEndings Konstante ist, die dir hilft. Bei Delphi denkt man nicht daran, aber zwischen Win=CRLF, Linux=CR und Mac=LF ist ein kleiner aber feiner Unterschied. Die Kleinigkeit kann dir zum Beispiel Nächte kosten, wenn du das nicht berücksichtigst.
Welcome to reality

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 35
- Registriert: Sa 4. Dez 2021, 11:43
- OS, Lazarus, FPC: Windows 10 / Ubuntu 20.04 LTS (L 2.0.12 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Wenn ich das richtig lese, wurde das Problem gemeldet und dann einfach nur geschlossen und auf andere Themen verwiesen. Für mich ist es ein bug in der IDE bei Nutzung unter zumindest Ubuntu. Die Komponenten, wie z.B. die Comobo-Box haben zur Laufzeit keine solche Probleme. Schon beim Klick der Combo-Box bei Farben unter Werkzeuge|Einstellungen|Umgebung|Objektinspektor sind nur die Farben und der jeweils mit Mouse-over markierte Eintrag zweifarbig und sichtbar. Damit ist es ganz sicher auch keine Einstellungssache beim Objektinspektor. Aber irgendwie wird das wohl nur noch unter dem Wunsch, ein Theme auswählen zu können, gehandelt.Sieben hat geschrieben: Sa 8. Jan 2022, 15:44 Und zu dem von dir ursprünglich auch angesprochenen Problem der 'unsichtbaren Einträge' im Objekt Inspektor hilft dir vielleicht dieser Thread weiter.
Ok, das ist jetzt wohl evt. off-topic, ich werde wohl damit leben müssen.
Edit: Unter Ubuntu 20.04 tritt das Phänomen nicht auf. Das passiert, wenn man eine Vielzahl an Systeme zum Test zur Auswahl hat.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Ist umgekehrt, Linux=LF, Mac=CR
- af0815
- Lazarusforum e. V.
- Beiträge: 6790
- 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: Datenbankzugriff in Lazarus - eine Odyssee!?
Kann sein, ich verwende immer LineEnding.

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Hi!
Helferlein für das überstrapazierte Hirn:
Alhabetisch entspricht numerisch:
Linux = #10 = LF
Mac = #13=CR
Winni
Helferlein für das überstrapazierte Hirn:
Alhabetisch entspricht numerisch:
Linux = #10 = LF
Mac = #13=CR
Winni
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Außerdem trifft das mit dem CR nur auf das klassische MacOS (< 10) zu. Seit dem Wechsel auf MacOS X und damit auf ein - an sich - Unix ist es dort ebenfalls LF. 

FPC Compiler Entwickler
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
OK, wie wir sehen, ist es am geschicktesten LineEnding zu verwenden 

-
- Beiträge: 35
- Registriert: Sa 4. Dez 2021, 11:43
- OS, Lazarus, FPC: Windows 10 / Ubuntu 20.04 LTS (L 2.0.12 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Also, es kommt der Punkt, da muss man erkennen, dass egal wie viel Energie man hier noch investiert, der Erfolg ausbleiben wird.
Das mag an fehlenden Kenntnisse speziell im Umgang mit Lazarus liegen, an zu hohen Erwartungen aus Sicht eines Delphi7-Benutzers bzgl. der grafischen Entwicklung oder schlicht an doch erheblich an einigen mangelhaften Komponenten zumindest für die grafische Entwicklung, was ja Lazarus eigentlich ausmacht.
Ich habe weitere Tests mit SQLite3 gemacht, ich laufe hier immer wieder kurz oder lang auf Access Violations (egal ob Ubuntu 20.04 oder Windows 10), selbst wenn ich die Komponenten grafisch nur ins Form platziere und die Werte und Funktionen manuell mit Leben füllen bzw. ausführe. Und es gibt tonnenweise bekannte bugs die zumindest diese doch recht nichtssagende Fehlermeldung referenzieren. Ich breche das jetzt hier ab. Danke für Eure Mühen an dieser Stelle.
Das mag an fehlenden Kenntnisse speziell im Umgang mit Lazarus liegen, an zu hohen Erwartungen aus Sicht eines Delphi7-Benutzers bzgl. der grafischen Entwicklung oder schlicht an doch erheblich an einigen mangelhaften Komponenten zumindest für die grafische Entwicklung, was ja Lazarus eigentlich ausmacht.
Ich habe weitere Tests mit SQLite3 gemacht, ich laufe hier immer wieder kurz oder lang auf Access Violations (egal ob Ubuntu 20.04 oder Windows 10), selbst wenn ich die Komponenten grafisch nur ins Form platziere und die Werte und Funktionen manuell mit Leben füllen bzw. ausführe. Und es gibt tonnenweise bekannte bugs die zumindest diese doch recht nichtssagende Fehlermeldung referenzieren. Ich breche das jetzt hier ab. Danke für Eure Mühen an dieser Stelle.
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Datenbankzugriff in Lazarus - eine Odyssee!?
Vielleicht noch ein letzter Versuch, wenn das größte Ärgernis diese Access Violation ist - und die ist ganz sicher ein Show-Stopper erster Güte. Dazu müsstest du allerdings den hier angesprochenen Vorschlag einmal umsetzen:
Im Package-Menü 'Neue Komponente', in 'Neues Package' wählen, als Ancestor SQLite3Connection auswählen. (Das passende Icon findest du unter /components/sqldb/design der Lazarus-Installation.) Beim Speichern am besten ein frisches Verzeichnis an geeigneter Stelle anlegen. Die IDE erzeugt dir dann ein leeres Gerüst für einen Abkömmling, in den du wie beschrieben unter published die Zeile
einträgst. Im Package-Editor einmal kompilieren und dann unter 'Verwenden' den Punkt 'Installieren' wählen. Die IDE wird sich einmal neu erzeugen, und danach kannst du die geänderte Komponente verwenden. Ein Rechtsklick auf die SQLite3Connection deines Projekts bietet dafür den komfortablen Menüpunkt 'Klasse ändern'.
Im Package-Menü 'Neue Komponente', in 'Neues Package' wählen, als Ancestor SQLite3Connection auswählen. (Das passende Icon findest du unter /components/sqldb/design der Lazarus-Installation.) Beim Speichern am besten ein frisches Verzeichnis an geeigneter Stelle anlegen. Die IDE erzeugt dir dann ein leeres Gerüst für einen Abkömmling, in den du wie beschrieben unter published die Zeile
Code: Alles auswählen
property Connected stored False;
Nein, es verhindert nur, dass die Eigenschaft Connected in der Formulardatei gespeichert wird, also auch ein automatisches Re-Connect wenn das Projekt geladen oder ausgeführt wird. Du musst die Verbindung dann zur Laufzeit explizit per Connected := True aufbauen, was ja eh ratsam ist. (Und ich vermute da auch noch einen Käfer im Streaming-System, der besagte Access Violation auslöst und auf diese Weise umgangen wird.)Michel hat geschrieben:Bleibt diese Ableitung gerade bei Nutzung der grafischen Komponenten stets aktiv, d.h. die Eigenschaft Connect lässt sich tatsächlich nur während des Entwurfs auf Aktiv setzen?