Database-Handle global deklarieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
twinkle
Beiträge: 14
Registriert: Di 12. Nov 2013, 23:53

Database-Handle global deklarieren

Beitrag von twinkle »

Ich möchte ein Database-Handle global deklarieren, um aus jeder beliebigen Stelle im Code darauf zugreifen zu können. Außerdem möchte ich Zustandvariablen, die im Zusammenhang mit der DB-Verbindung stehen, gleichermaßen global deklarieren. In den meisten objektorientierten Sprachen benutzt dafür z. B. eine statische Klasse, wie sieht's denn da in Lazarus/Free Pascal aus? 8)

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Database-Handle global deklarieren

Beitrag von Thomas B. »

Einfach eine neue Unit mit einer TDatenbankVerbindungsKlasse erstellen. Darin die Datenbankverbindungskomponenten (z.B. ZEOS) und andere Zustandsvariablen (mit Sichtbarkeit "private") kapseln, und und und...
Und dann noch im Interface-Teil auch eine Instanz von der Klasse ("MeinNeuesObjekt: TDatenbankVerbindungsKlasse;") benennen und z.B. im "Initialization" Abschnitt erzeugen ("MeinNeuesObjekt := TDatenbankVerbindungsKlasse.Create()").

Sobald Du dann diese Unit irgendwo anders im Programm (mit "uses") einbindest, kannst Du das Objekt nutzen, dass bei Programmstart beim "laden" der Unit in dessen Initialization Abschnitt erzeugt wurde.
Nicht vergessen z.B. im "Finalization" Abschnitt das Objekt wieder freigeben.
Komplizierter wird das u.a. bei Multithreading.

Globale Variablen gehen auch zu deklarieren, aber ich rate Dir lieber mit public/published Eigenschaften von Objekten (Klasse) zu arbeiten. ==> Objektorientierte Programmierung

Ich glaube Du solltest Dir erst einmal die Freepascal oder Delphi Grundlagen genauer anschauen, z.B. hier: http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html, und hier u.a. Kapitel 6

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Database-Handle global deklarieren

Beitrag von Socke »

Thomas B. hat geschrieben:Ich glaube Du solltest Dir erst einmal die Freepascal oder Delphi Grundlagen genauer anschauen, z.B. hier: http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html, und hier u.a. Kapitel 6
Ich denke, es sind eher Best Practices denn Pascal Grundlagen gefragt.

Neben Thomas' Variante mit einer entsprechenden Klasse und einer globalen Variable fährt man auf jeden Fall besser als mit einem Haufen unzusammenhängender globaler Variablen. In Delphi und Free Pascal bietet sich als Oberklasse TDataModule an. Verwendet man die GUI-Datenbank-Komponenten hat man die angenehme Möglichkeit, die entsprechende Klasse mit der Maus mit entsprechenden Verbindungs-Komponenten zu versehen (und noch einige andere nützliche Dinge hinzuzufügen).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

twinkle
Beiträge: 14
Registriert: Di 12. Nov 2013, 23:53

Re: Database-Handle global deklarieren

Beitrag von twinkle »

Danke für eure Antworten! Verstehe ich das richtig, dass wenn ich ein "Datenbankobjekt" auf meine Form im GUI-Designer ziehe, dieses automatisch global verfügbar ist? (Zumindest in der jeweiligen Form.)

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Database-Handle global deklarieren

Beitrag von Socke »

twinkle hat geschrieben:Danke für eure Antworten! Verstehe ich das richtig, dass wenn ich ein "Datenbankobjekt" auf meine Form im GUI-Designer ziehe, dieses automatisch global verfügbar ist? (Zumindest in der jeweiligen Form.)
Ein Datenobjekt legst du über das Menü "Datei" -> "Neu ..." an. Damit es in einer anderen Unit verfügbar ist, musst du die Unit des Datenmoduls dort in die Uses-Klausel aufnehmen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Database-Handle global deklarieren

Beitrag von Thomas B. »

Werden Objekte auf der GUI-Form abgelegt, dann erstellt Lazarus automatisch die entsprechenden Verweise im Quellcode.
Alle andere Methoden innerhalb dieser Klasse (TForm) können auf Eigenschaften vom "Datenbankobjekt" zugreifen.

Sollen andere Objekte auch auf diese Eigenschaften (werden in FreePascal gern als private Felder mit Präfix "f" gekennzeichnet) zugreifen können,
kann man sie "public" stellen, oder noch besser eine Eigenschaft daraus machen --> siehe Kapitel 6.4 im obigem Link

Antworten