Zum Inhalt

Verknüpfung Datenbank

Verknüpfung von Controls mit Datenbankinhalten

Die Verknüpfung von Controls mit Datenbankinhalten besteht aus mehreren Teilen und zwar der

  • Einrichtung von Datenbankverbindungen
  • Formulierung von Hinterlegung von Datenbankanfragen
  • Verknüpfung von Controls mit Datenbankabfragen
  • Automatischen oder ereignisgesteuerten Ausführung von Datenbankanfragen zur Aktualisierung von Controls

Einrichten von Datenbankinhalten

Eine Datenbankabfrage ist immer an eine hinterlegte Verbindung zur Datenbank gebunden. Bevor man also Datenbankabfragen hinterlegen kann, muss man zuvor eine oder mehrere Datenbankverbindungen hinterlegen. In den entsprechenden Konfigurationsdialog gelangt man in der Ansicht Data Sets mittels Rechtsklick auf die weiße Fläche zur Add Connection, wie die nächste Abbildung dargestellt.

Klickt man auf den angezeigten Verbindungsnamen öffnet sich ein Konfigurationsfenster, in dem man die Verbindungsdaten ändern bzw. neu hinterlegen kann. Wir vergeben zuerst einen Namen für die Verbindung wie z.B. dbcon, dann die weiteren spezifischen Daten für die Datenbankverbindung wie Username und Passwort usw.


Der WebForm-Designer unterstützt derzeit mehrere Datenbanksysteme wie MMSQL, Oracle, MySQL, DB2, H2 und PostgreSQL. Beispielsweise für eine PostgreSQL-Datenbank namens legotrailerdb mit dem User postgres und Passwort postgres könnte dieser Eintrag wie in der letzten Abbildung dargestellt werden.

Formulierung und Hinterlegung von Datenbankabfragen

Mittels Rechtsklick auf der gewählten Datenbankverbindung erhalten wir die Möglichkeit Abfragen zu erstellen, zu löschen oder zu verändern. Mit einem Klick auf die neu erstellte Abfrage New Query öffnet sich unten einen neuen Reiter, in dem wir den Name der Abfrage und die Abfrage selber festlegen können.

Ein Klick auf das Textfeld Command und ein weiterer Klick auf den Button Open editor öffnet ein Fenster für die Eingabe der SQL-Anweisung. Nach Abschluss steht die Abfrage in der Auswahlliste unter der Datenbankverbindung.

Abfragen für das erste Formular

Das Formular Stammdaten abfragen soll zur Laufzeit in der Combobox Kunde (interner Name: kunde_combobox) eine Liste von Kundennamen zur Auswahl anbieten. Für den ausgewählten Kunden sollen in nachfolgenden TextBoxen der Name des Kunden, die Stadt und die Bonität sowie in der Combobox die Liste der Auftragsnummer zur Auswahl angezeigt werden. Hierfür benötigen wir insgesamt 3 Datenbankabfragen:

  • Die SQL-Anweisung 1: Erstellen Kundenliste dient zum Befüllen der Dropdown-Liste kunde_combobox mit dem Namen der Kunden. Sie liefert kdname und kdnr aus der Tabelle kunden in Form einer „Key-Value-Paar-Ergebnismenge“, indem sie kdname als key und kdnr als value zurückliefert (nächste Abbildung).
  • Die SQL-Anweisung 2: Ausgabe ausgewählter Kunde dient zum Befüllen der TextBoxen mit den internen Namen kdname_textbox, kdstadt_textbox und kdbonitaet_textbox. Sie liefert als Result kdnr, kdname und bonitaet entsprechend der in ComboBox kunde_combobox gewählten Kundennummer.
  • Die SQL-Anweisung 3: Erstellen Auftragsliste dient dazu, die Groupbox auftrnr_groupbox mit der Liste der Auftragsnummern entsprechend der in ComboBox kunde_combobox gewählten Kundennummer zu befüllen. Hierzu erstellen wir eine Einspalten-Ergebnistabelle für auftrnr.
    Insgesamt haben wir damit nun alle drei Abfragen für den ersten Prozessschritt definiert. Im nächsten Kapitel wird beschrieben, wie diese mit den Controls verbunden werden.

Abfragen für das zweite Formular

Im Formular Auftrag anzeigen soll für den im vorherigen Formularschritt Stammdaten abfragen ausgewählten Kunden dessen Name sowie für die dort ausgewählte Auftragsnummer die Liste der Auftragspositionen sowie der Auftragswert als Summe der Auftragspositionen berechnet werden (auf die Berechnung dieser Summe und die hierfür benötigte JavaScript-Funktion werden wir erst später Zeilenweise Verarbeitung von Subtabellen eingehen.)


Im Prinzip könnten wir den Kundennamen diesem Prozessschritt direkt als Aufrufparameter übergeben, da wir diesen im Prozessschritt Stammdaten abfragen bereits bestimmt haben. Wir wollen jedoch annehmen, dass wir anstatt dessen die Kundennummer KdNr übergeben, so dass wir den Kundennamen mittels einer Datenbankabfrage bestimmen müssen. Ebenso soll die gewählte Auftragsnummer AuftrNr als Aufrufparameter an unseren Prozessschritt übergeben werden, für den wir nun per Datenbankabfrage die zugehörigen Auftragspositionen bestimmen müssen.

Bei SQL-Anfragen müssen sich somit in ihren WHERE-Klauseln auf Werte von Aufrufparametern beziehen, und zwar KdNr bzw. AuftrNr. Dies geht nicht direkt, d.h. eine SQL-Anfrage kann in WebForm nur Controls, nicht aber Aufrufparameter referenzieren. Wir ergänzen deshalb unser Formular um zwei weitere TextBoxen als Hilfselemente kdnr_textbox und auftrnr_textbox und verknüpfen diese jeweils mit den entsprechenden Aufrufparametern. Damit stehen sie uns nun im Formular als Bezugswerte zur Verfügung.

Die beiden TextBoxen deklarieren wir als „versteckt“ (d.h. sie werden zur Laufzeit nicht angezeigt), in dem wir in ihren Properties hidden auf true setzen.
Zum Befüllen des Controls kdname_textbox hinterlegen wir eine Datenbankabfrage Bestimmen Kundenname und für das Befüllen unserer Subtable eine Abfrage Bestimmen Auftragspositionen. Wie die dort dargestellte Tabellenstruktur erzeugt wird, werden wir später Zuordnung von Datenbankabfragen zu Controls kennenlernen.

Verknüpfung von Controls mit Datenbankabfragen

Die Zuordnung von Datenbankabfragen zu Controls erfolgt in den Properties der Controls. Hierzu wählen wir im Feld DatabaseQuery den Namen der gewünschten Abfrage aus der angebotenen Liste aus und wählen bei Fillmode Database. Falls die Abfrage mehr als eine Spalte zurückliefert, geben wir im Feld DatabaseColumn die gewünschte Spalte an.

Für unser Formular Stammdaten abfragen sehen die Properties der Controls wie folgt aus.

  • Properties des Controls kunde_combobox
  • Properties des Controls kdname_textbox
  • Properties des Controls kdstadt_textbox
  • Properties des Controls kdbonitaet_textbox
  • Properties des Controls auftrnr_combobox

Für unser Formular Auftrag anzeigen sehen die Properties für das Control kdname_textbox wie in der folgenden Abbildung dargestellt aus. Dem Control subtable ordnen wir im Feld Daten der Properties die Datenbankanfrage Bestimmen Auftragspositionen zu. Auf die im subtable-Control zu realisierende Tabellenstruktur und deren Verknüpfung mit dieser Datenbankabfrage gehen im Abschnitt Subtabellen ein.

  • Properties des Controls kdname_textbox
  • Properties des Controls subtable

Ereignisgesteuerte DB-Anfragen-Ausführung zur Aktualisierung von Controls

Beim Starten einer WebForm-Aktivität (genauer: beim Laden des Formulars) werden alle diesem Formular zugeordneten Datenbankabfragen automatisch ausgeführt. Alle Controls, die mit Datenbankabfragen verbunden sind, die hierbei erfolgreich ausgeführt werden können, werden mit den entsprechenden Werten aus dem Abfrageergebnis versorgt. Evtl. können nicht alle diese Abfragen erfolgreich ausgeführt werden, weil sie z.B. Controls referenzieren, die zu diesem Zeitpunkt noch keinen Wert aufweisen. (Anmerkung: Der „Fehlschlag“ solcher Datenbankabfragen wird formularintern abgefangen und ist für den Anwender nicht sichtbar.) Für diese Controls muss die (erneute) Ausführung der Datenbankabfrage zum geeigneten Zeitpunkt explizit angestoßen werden, indem wir ein Reload-Ereignis für das betroffene Control erzeugen (siehe unten).

Wenn wir die Datenbankabfragen für beide Formulare wie gezeigt im Data Sets-Fenster hinterlegt haben, diese in den Properties der Controls wie angegeben referenziert werden und den Prozess im TestClient auf Basis der LegoTrailer-Datenbank ausführen, dann bekommen wir bei Kunde auswählen eine Auswahlliste angeboten, aus der wir auch einen Eintrag auswählen können. Allerdings hat diese Auswahl noch keine Auswirkung auf die anderen Controls; d.h. sie bleiben leer, wie z.B. Kundenname, Stadt, Bonität und Auftragsnummer in der folgenden Abbildung.

Damit diese Controls automatisch „befüllt“ werden, sobald wir in dem „übergeordneten“ Control den benötigten Wert hinterlegt haben, müssen wir von diesem aus die Aktualisierung der „abhängigen“ Controls und damit die (erneute) Ausführung der mit ihnen assoziierten Datenbankabfragen anstoßen. In unserem Beispiel müssen wir beim Control kunde_combobox hinterlegen, dass bei Wertänderung die Controls kdname_textbox, kdstadt_textbox, kdbonitaet_textbox und auftrnr_combobox aktualisiert werden sollen.

In den Properties des Controls kunde_combobox klicken wir im Feld Event Handler auf den Button Edit Actions. In dem sich öffnenden Dialog des Eventhandlers klicken wir auf den Button Add Event action wie in der folgenden Abbildung dargestellt.

Nun muss unter Type onclick sowie unter Actiontype Reload ausgewählt werden. Im Feld Value tragen wir die zu aktualisierenden Controls kdname_textbox, kdstadt_textbox, kdbonitaet_textbox, auftrnr_combobox durch Kommas getrennt ein.

Nach Sichern aller Änderungen erhalten wir bei Ausführung unseres Prozesses das Formular Stammdaten abfragen nun mit den gewünschten Inhalten angezeigt.

Für das Formular Auftrag anzeigen benötigen wir keinen Eventhandler, da der für die Datenbankabfrage erforderliche Wert per Aufrufparameter an das Control auftrnr_textbox übergeben wird und somit zum Ladezeitpunkt des Formulars bereits zur Verfügung steht.