Eine sinnvolle Einrichtung in Delphi ist das Datenmodul. Viele Entwickler fügen Ihre Table- oder Querykomponenten immer noch direkt dem Formular zu und erstellen auch den ganzen Code, der für die Datenbankzugriffe notwendig ist, direkt im Formular. Viel sinnvoller ist es aber ein Datenmodul zu verwenden, um datenorientierte Routinen von der Formularebene zu trennen. Auch wenn man hierbei sicher noch nicht von einer echten Mehrschichtigkeit reden kann, ist es doch ein erster Schritt dahin und die Anwendung ist recht einfach.
Sinnvoll ist es zunächst für Formulare und Datenmodule eigene Unterverzeichnisse zu erstellen,
z.B.
\meinProjekt\forms
\meinProjekt\datenmodule
Einheitliche Namensgebung für Ihre Formulare und Datenmodule
Ebenfalls sinnvoll ist es eine bestimmte einheitliche Namensgebung für Formulare und Datenmodule zu verwenden. Da gibt es sicher viele Regelungen und jeder hat seinen eigenen Ansatz, aber letztlich ist nur wichtig, dass es für Sie eindeutig ist.
Ich verwende folgendes:
Formularname : frmFormular (frmAdressen)
Formularunit: vFormular (vAdressen)
Datenmodulname: dmFormular (dmAdressen)
Datenmodulunit: datamod_formular (datamod_Adressen).
Um ein Datenmodul hinzuzufügen klicken Sie einfach recht in der Projektverwaltung auf das Projekt und wählen
‘Neue hinzufügen’ – ‘Weitere’ – ‘Delphi Dateien’ – ‘Datenmodul’.
Um das neue Datenmodul (nach Namensvergabe und Speichern!) in dem dazugehörigen Formular verwenden zu können, müssen Sie es im ‘Uses’ – Abschnitt dem Formular hinzufügen.
Mit dem Datenmodul arbeiten
Nun können Sie Ihre Table/Query dem Datenmodul hinzufügen. Um auf diese aus dem Formular heraus zugreifen zu können, geben Sie in den entsprechenden Formularabschnitten dann einfach dmFormular.table… ein.
Aber halt…
Zunächst müssen Sie das Datenmodul natürlich erstellen. Natürlich können Sie dies automatisch erzeugen lassen (unter Projektoptionen-Formular), wobei Sie u.U. auf die Reihenfolge der Erzeugung achten müssen, i.d.R. dabei zunächst das Datenmodul, dann das Formular.
Sinnvoller ist es aber zumeist dies manuell zu machen. Hierzu im Create-Abschnitt des Formulars:
dmFormular:=TdmFormular.create(frmFormular);
Wenn Sie dabei in Create das Formular angeben, so wird das Datenmodul beim Freigeben des Formulars automatisch freigegeben.
Erstellen Sie es über folgenden Weg:
dmFormular:=TdmFormular.create(nil);
müssen Sie sich selbst um die Freigabe (z.B. im Destroy-Event der Form) kümmern:
dmFormular.free;
Sinnvoll ist es auch
dmFormular:=Nil zu setzen;
Noch einige Tipps:
Wie können Sie aus dem Datenmodul heraus auf Elemente des Formulars zugreifen?
Ganz einfach: frmFormular.labelXY (als Beispiel). Natürlich müssen Sie aber die Form dem Datenmodul hinzufügen.
Das geht allerdings nicht im Interface-Abschnitt, da dies zu einem Circular-Reference-Konflikt führen würde. Fügen Sie also die Form unterhalb von ‘Implementation’ hinzu.
Implementation
Uses frmFormular;
Es könnte sein, dass Sie bereits in FormCreate – Abschnitt auf Methoden des Datenmoduls zugreifen müssen, die wiederum das Formular refenzieren. Dies wird zu einem Konflikt führen. Umgehen Sie dies, indem Sie in FormCreate als erste Zeile
frmFormular:=self;
einfügen.
Alles was Ihre Daten bearbeitet, sollte nun in Prozeduren und Funktionen innerhalb des Datenmoduls geregelt werden, rufen Sie diese Methoden dann in den entsprechenden Events (z.B. in einem OnClick-Event eines Buttons) auf. Vermeiden Sie es datenorientierte Routinen direkt in den Events zu implementieren.
Damit haben Sie bereits einen großen Schritt hin zu einem übersichtlicheren und leichter zu pflegenden Code getan. Dies erleichtert auch den Austausch von GUI-Komponenten, da Sie in den entsprechenden Events des neuen Formulars nur noch die dazugehörenden Datenmodul-Methoden einfügen müssen.