Datenbankanwendung mit Lazarus entwickeln

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 660
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Datenbankanwendung mit Lazarus entwickeln

Beitrag von fliegermichl »

Hallo zusammen,

nehmen wir an ich hätte die Absicht, eine vollkommen neue (Datenbank) Anwendung mit Lazarus zu entwickeln.
Nun hab ich zwar 30 Jahre Erfahrung mit der Programmierung in Pascal (bislang hauptsächlich mit Delphi).
Allerdings bislang keine Datenbankanwendungen.

Welche Datenbank und welche Zugriffskomponenten sollte ich verwenden und wie sollte der prinzipielle Aufbau einer solchen Anwendung aussehen?
Man hat ja hier ziemlich die Qual der Wahl.

Benutzeravatar
six1
Beiträge: 218
Registriert: Do 1. Jul 2010, 19:01

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von six1 »

Ich verwende schon sehr lange ZEOS Access (über fpcupdeluxe installieren) im Zugriff auf MariaDB
Bin sehr zufrieden.
Zuletzt geändert von six1 am So 20. Sep 2020, 08:44, insgesamt 1-mal geändert.
Gruß, Michael

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

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von af0815 »

SQLdb oder ZEOS.

SQLdb ist bei fpc/Lazarus dabei. ZEOS ist extra Komponente. Die beiden sind nicht so 100% austauschbar. Wenn man sich für einer der System entscheidet, so kann man nicht einfach tauschen.

Die neue native Reportingengine von Lazarus/FPC kann mit ZEOS nicht nativ umgehen, die ist SQLdb lastig (derzeit).

Wenn man mit Delphi kompatibel sein will, kommt man um ZEOS nicht herum.

Punkto Mächtigkeit, so hat SQLdb den Vorsprung von ZEOS meiner Erfahrung nach aufgeholt. Das ist aber eine subjektive Meinung und ich verwende beide Systeme. Neue Projekte fange ich mit SQLdb an, wegen dem Reporting mit fpReport. Das kann ohne Widgetset auch rendern (pdf). Das ist bei headless Systemen super.

Wie gesagt, alles hat Vor-und Nachteile.

Bezüglich Datenbankserver, hängt es vom System stark ab, auch davon auf was man eingeschult ist (ja, das gibt es auch).
SQLite, MariaDb und MS-SQL sind für mich normal. MS-SQL läuft auch unter Ubuntu 16 bzw. 18 perfekt. Administieren tut man den halt von einem Windows Rechner, da hat man keinen Unterschied zu einem Windowsserver. Die Expressversion ist da frei und hat Access abgelöst. DBase und Access würde ich um jeden Preis vermeiden, da ist SQLite um Lichtjahre besser.

Egal was man nimmt, die Lernkurve ist da :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Levario
Beiträge: 36
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.8 FPC 3.04)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von Levario »

fliegermichl hat geschrieben:
Sa 19. Sep 2020, 11:15
Welche Datenbank und welche Zugriffskomponenten sollte ich verwenden und wie sollte der prinzipielle Aufbau einer solchen Anwendung aussehen?
Man hat ja hier ziemlich die Qual der Wahl.
Hallo Fliegermichl,

ich selber nutze nur Lazarus (kein Delphi) und setze für die lokale Entwicklung 1 PC Version Firebird Embedded Server, Firebird, MySQL oder Maria DB + Zeos ein.

Für Server Client Version MariaDB, MySQL in der Version 10 + Zeos. Hat den Vorteil auch andere Systeme können hier ohne Probleme zugreifen und es gibt ne Menge Literatur und Kurse dazu. Desktop Entwicklung mit Lazarus und Freepascal, Webentwicklung mit HTML, PHP + Framneworks wie Bootstrap. Apps der Einfachheitshalber mit Flutter und Dart (Google Framework Java ähnlich für iOS und Android). Als Server meist Linux Ubuntu Server in der aktuellen LTS = Long Term Support Version.
Bin allerdings reiner Hobby Entwickler. Die virtuelle Umgebung (VMs Server und Client Systeme in Linux, Mac und Windows) habe ich auf einen kleinen MicroServer + Proxmox virtualisiert. Spiele ab und zu auch mit Windows Server 2016 herum. Allerdings bislang ohne grosse Ergebnisse / Erfahrungen.

Würde mich auch mal interessieren wie ihr das macht! (Ohne Delphi)

Gruß
Levi
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

Benutzeravatar
theo
Beiträge: 8465
Registriert: Mo 11. Sep 2006, 19:01

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von theo »

Levario hat geschrieben:
Sa 19. Sep 2020, 20:24
PHP + Framneworks wie Bootstrap
Leicht off-topic, aber da du das erwähnst.
Ich habe mal für das CMS/CMF Processwire einen Wysiwyg Bootstrap 4 Editor gebastelt, so eine Art "Studie".
Man kann so eine responsive Webseite layouten ohne zu tippen und v.A. ohne alle die CSS Klassen zu kennen.
Ein Video gibt es hier: http://theowp.bplaced.net/upload/reptile.html
(Dies ist nicht die aktuellste Version, aber das längste Video, welches zeigt wie es geht. Diese Version hat noch ein paar kleine Macken).

Es ist natürlich schwierig zu verstehen was da abgeht, wenn man Bootstrap und Processwire nicht kennt.
Der so generierte Code ist astrein, so dass man das so erstellte Resultat auch einfach herauskopieren kann, falls ein eigentliches CMS nicht gewünscht ist.
Dann ist es eine Art IDE.

charlytango
Beiträge: 203
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von charlytango »

Zur Datenbank und den Zugriffskomponenten schließe ich mich af0815 an ;)

Früher (unter Delphi) habe ich die Funktionen für die Datenbankanbindung in einem Datenmodul verwaltet. Das hatte aber immer wieder Probleme mit Vererbung und hat auch öfter mal andere Mucken gemacht.
In Lazarus hab dich leider die gleichen Erfahrungen gemacht.

Daher habe ich dann auf die GUI-Programmierung mit Datenmodul (Nur für Datenbankanbindung) verzichtet und alles in ein Singletonobjekt gepackt (die gleiche Strategie wie ich es bei Verwaltung von Programmeinstellungen, Splashscreen, Logging, Application-GUI verwende)
Seitdem klappt das schön aufgeräumt und seidig. Mittels Defines ist das Objekt auch fähig unterschiedliche Datenbanken zu nutzen. Bezüglich Lernkurve: nicht vergessen die aktuellen Zugriffs-DLLs (oder entsprechendes Linux-Äquivalent) je nach verwendeter DB mit berücksichtigen.

In einfacheren/übersichtlichen Formularen klebe ich die nötigen Komponenten (TDatasource, eine der SQL Queries etc.) direkt aufs Formular. In komplexeren Formularen mit vielen Datenzugriffskomponenten nutze ich aus Übersichtsgründen dafür ein Datenmodul. In dieser Nutzungsvariante hatte ich damit auch nie wieder Probleme. Die nötige Connection Eigenschaft für die Datenzugriffskomponenten auf Formular und Datenmodul weise ich manuell im jeweiligen Create-Event zu.

Je nachdem wie umfangreich die Datenbankanwendung werden soll, sind Programme zum Datenbankdesign, zur Datenbankverwaltung und zum Lesen/checken der Daten sinnvoll. Ich arbeite unter Windows. Für mich reicht HeidiSQL völlig aus um Tabellen zu erstellen und die Datenbank zu warten. Für eine schnelle Installation zum Entwickeln mit MariaDB benutze ich XAMPP.

Hoffe es hilft die Lernkurve etwas zu verflachen ;)

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

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von af0815 »

charlytango hat geschrieben:
So 20. Sep 2020, 11:13
Zur Datenbank und den Zugriffskomponenten schließe ich mich af0815 an ;)

Früher (unter Delphi) habe ich die Funktionen für die Datenbankanbindung in einem Datenmodul verwaltet. Das hatte aber immer wieder Probleme mit Vererbung und hat auch öfter mal andere Mucken gemacht.
In Lazarus hab dich leider die gleichen Erfahrungen gemacht.
Kann ich nicht so unterschreiben, allerdings wird bei mir alles auser dem MainForm im Code erzeugt ! Man darf sich nicht auf die Reihenfolge der Fenstererstellung verlassen müssen. Dadurch ist es auch besser testbar. Queries werden im DM bei mir dynamisch im Code erstellt und die Lebensdauer ist je nach Objekt unterschiedlich. Klar damit geht klassischen Rad nicht unbedingt. Zum basteln :-) klick ich mir schnell ein DM zusammen, teste und hänge dann den Code in die eigentliche App. Nachdem das ganze bei mir sowieso so ist, ein Schirm, ein Frame, eine DB ein Singleton, ist das ganze für mich skalierbar und ich kann jeden Aspekt einzeln testen und auch für Unittests brauchbar halten. Ist eine schmerzhafte Evolution gewesen :shock: :arrow: 8)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 660
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von fliegermichl »

af0815 hat geschrieben:
So 20. Sep 2020, 12:58
Ist eine schmerzhafte Evolution gewesen :shock: :arrow: 8)
vielen Dank für eure zahlreichen Antworten.
Genau das ist der Grund weshalb ich gefragt hatte. Ich arbeite seit 20 Jahren an einem 3D CAD das mittlerweile doch recht umfangreich geworden ist.
Obwohl ich von Anfang an "Bussines Code" von der Oberfläche getrennt gehalten hatte, haben sich doch jede Menge "Verquickungen" und Basteleien
eingeschlichen die die Wartbarkeit und Übersichtlichkeit erschweren.

Deswegen möchte ich mir jetzt im Vorfeld klare Ziele stecken und auch eine ungefähre Richtung wie ich diese zu erreichen gedenke.

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von MmVisual »

Ich nutze ebenfalls Zeos.
Ich wollte mal in mein Code SQLDb testweise verwenden, ist leider fehl geschlagen, Zeos hat da ein paar kleine aber wichtige Features die SQLDb leider nicht nicht.
z.B. wenn man auf einen Tabellentitel klick kann man per Parameter der TZQuery die Spaltensortierung übergeben, dann sortiert Zeos im RAM die Daten um, ohne erneute SQL Abfrage. Somit werde alle mit verknüpften Tabellen nicht neu geladen.
Auch braucht man sich bei Zeos nicht extra um die Transaction zu kümmern, das macht Zeos ganz alleine.
Ich habe das dann mit SQLDb gelassen, der Umbau war mir zu aufwändig. Ich weiß nicht ob in der aktuellsten Version SQLDb dieses Feature auch schon hat.

Hier der SVN Link wo man das ganze Zeos mit TortuiseSVN laden kann:
svn://svn.code.sf.net/p/zeoslib/code-0
Damit ist man immer aktuell, bzw. kann sich den Branch laden den man braucht.

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

Re: Datenbankanwendung mit Lazarus entwickeln

Beitrag von af0815 »

MmVisual hat geschrieben:
Mi 23. Sep 2020, 20:49
Auch braucht man sich bei Zeos nicht extra um die Transaction zu kümmern, das macht Zeos ganz alleine.
Ich habe das dann mit SQLDb gelassen, der Umbau war mir zu aufwändig. Ich weiß nicht ob in der aktuellsten Version SQLDb dieses Feature auch schon hat.
Kann es schon lange. Nur anders zu konfigurieren.

Umbau ist aufwändig, das ist mir klar :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten