Visuelle Datenbankprogrammierung mit Delphi und C++-Builder

Willemers Informatik-Ecke

Table, Query und DataSource

Mit Hilfe der Datenbank-Kontrollelemente ist ein direkter Zugriff auf Datenbanken recht einfach möglich. Aus Sicht der Komponente wird auf die Datenquelle (DataSource) zugegriffen. Die DataSource wiederum verbirgt gegenüber dem Programm, wo die Daten genau herkommen. Der einfachste Fall ist eine Tabelle. Hier werden einfach alle Felder einer Tabelle an Delphi bzw. C++-Builder durchgereicht. Hinter der DataSource kann aber auch eine Query, also eine Datenbankanfrage stecken, die über mehrere Tabellen geht. Das wird durch eine SQL-Anweisung realisiert.

DataSource, Table und Query kann in ein DataModule gelegt werden. Das vereinfacht die Übersicht vor allem, wenn das Projekt aus mehreren Modulen oder Formularen besteht. Um auf die Elemente innerhalb des DataModuls zuzugreifen, wird der Name des Moduls (beispielsweise verwende ich gern DB dazu) vorangestellt. Die DataSource "Kunde" würde von C++-Builder mit DB->Kunde und von Delphi mit DB.Kunde erreicht.

Aufbau der Daten-Pipeline

Komponente TTable aus Datenzugriff / DataAccess in Form legen. Property Databasename wird die Datenbank festgelegt. Bei SQL ist dies der Name der DB, bei dBase oder Paradox das Verzeichnis. Unter der Property Tablename wird die Tabelle (SQL) bzw. die Datei (DBF bei dBase) eingetragen. Name wird z. B. auf TiereDB gesetzt.

Nun wird die DataSource aus Datenzugriff / DataAccess in das Form gelegt. Über die Property DataSet kann nun die Tabelle TiereDB ausgewählt werden. Name z. B. TiereQuelle.

Nun etwas, um die Daten sichtbar zu machen. Beispiel DBGrid aus Datensteuerung / DataControl. Als Property DataSource nun TiereQuelle auswälen.

Wird nun die Property Active von TTable von false auf true gesetzt erscheinen bereits im Entwurf die Daten im DBGrid. DBGrid ermöglicht den Zugriff auf die gesamte Tabelle. Andere Elemente können meist nur auf einen Record und sogar nur auf ein Feld zugreifen. Um das Feld zu bezeichnen muß zusätzlich noch die Property DataField ausgewählt werden.

Zum Navigieren in der Datenbank dient der DBNavigator aus DataControls. Er braucht wiederum nur die DataSource. Mit ShowHint auf true zeigt die Anwendung Hinweise zur Benutzung des Navigators. Um einzelne Buttons des Navigators ein- und auszuschalten, wird die Property VisibleButtons gesucht und auf das +-Zeichen links doppelt geklickt. Es öffnet sich die Liste der Buttons, die nun einzeln auf true oder false gestellt werden kann.

Änderung der Postition der Datenbank wird in der DataSet-Komponente durchgeführt. Die aufzurufenden Methoden sind:
MemberNavigatorknopfBedeutung
First nbFirst gehe auf den ersten Record.
Prior nbPrior einen Datensatz zurück.
Next nbNext einen Datensatz vor
Last nbLast auf den letzten Datensatz
Edit nbEdit Daten zum Editieren freigeben
Post nbPost In die Datenbank übernehmen
CancelnbCancel Änderungen verwerfen
RefreshnbRefresh Erneut aus der Datenbank holen
Durch das Member-Flag ReadOnly wird eingestellt, ob der Dataset veränderbar ist.

TDBListBox ist ein Element, mit dem aus einer statisch vorgegebenen Menge Werte in ein Feld übernommen werden können. TDBLookupList wird dagegen durch ein Feld einer anderen Datenbank gefüllt. TDBComboBox und TDBLookupCombo verhalten sich gleich, allerdings ist das Eingabefeld frei editierbar.

Erzeugen einer Anwendung aus einer Datenbank

Database Desktop

wird über Tools/Database Desktop gestartet. Hiermit können Datenbanken erzeugt und editiert werden. File / New / Table erzeugt eine neue Tabelle, die standardmäßig im Paradox-Format angelegt wird. Aber auch dBase-Varianten sind möglich.

Per Table/Restructure kann die Definition jederzeit korrigiert werden.

Database Form Wizard

Aus dem C++-Builder wird per Menü Database / Form Wizard der Formular-Generator gestartet. Mit diesem kann man eine Standard-Eingabemaske mit Navigatorknöpfen und der zugehörigen Tabelle und DataSource erzeugen.

Der Form-Wizard fordert nach und nach alle benötigten Informationen an. Dies ist zunächst die Tabelle, dann welche Ausrichtung die Eingabefelder haben sollen und wo die Beschriftungen stehen. Aus diesem Form wird die Maske erstellt. Diese kann dann von Hand weiter bearbeitet werden.

Aktualisierung einer Query

Damit sich die Komponenten, die auf einer Query basieren bei Änderungen der zugrundeliegenden Tabelle aktualisieren, muss in den Eigenschaften der Query die Tabelle als DataSource angegeben werden.


Homepage (C) Copyright 2003 Arnold Willemer