Datenbankabfragen

Previous  Next

 

 

 

Letzte Änderung 01.11.2009

Abfrage mehrerer Tabellen (Joins)

Für dieses Beispiel benötigen Sie das Beispiel-Projekt fahrzeuge.xdev.

 

In relationalen Datenmodellen werden Datensätze i.d.R. nicht in einer einzigen Tabelle abgespeichert, sondern über mehrere Tabellen verteilt, die dann miteinander in Beziehung stehen (Relation). Bei Datenbankabfragen müssen die Werte daher häufig aus mehreren Datenbank-Tabellen zu einem Abfrageergebnis zusammengeführt werden (Joins). Entsprechende SQL-Anweisungen können sehr komplex werden. Aber auch diese generiert der SQL-Assistent automatisch für Sie.

 

» SQL-Assistent erkennt Verknüpfungen im ER-Diagramm «

Dazu müssen Sie jedoch vorher im ER-Diagramm (im Daten-Editor) alle Tabellen miteinander verknüpfen, zwischen denen eine Relation besteht. Der SQL-Assistent registriert die Verknüpfungen im ER-Diagramm automatisch und stellt die verknüpften Datenbank-Tabellen hierarchisch in Form eines Trees dar, sodass Sie anschließend nur noch die für die Abfrage benötigten Datenfelder anklicken müssen.

 

Das SQL-Statement wird dann vom Assistenten automatisch erzeugt.

 

 

hmtoggle_plus1Vorbereitungen:
1.Öffnen Sie das Beispiel-Projekt fahrzeuge.xdev.
2.Fügen Sie einen Button auf die Arbeitsfläche ein und benennen Sie diesen in Suchen um.
3.Wechseln Sie in die Code-Ansicht und wählen Sie das Ereignis hmtoggle_plus1 ACTION_PERFORMED ( ) | XDEV NLS: Bei Mausklick ( ) aus.

 

 

1.Fügen Sie eine Datenbankabfrage hmtoggle_plus1 XDEV Query | XDEV NLS: XDEV Datenbankabfrage in den Code-Editor ein und klicken Sie diese an, um den SQL-Assistenten aufzurufen.
2.Klicken Sie bei Quelle (Datenbank) die Datenbank-Tabelle FAHRZEUGE an, um zunächst alle Datenfelder dieser Tabelle zu selektieren.
3.Öffnen Sie den Zweig bei MODELL_ID <> MODELLE und selektieren Sie das Datenfeld MODELL der Datenbank-Tabelle MODELLE.
4.Öffnen Sie den Zweig bei HERSTELLER_ID <> HERSTELLER und selektieren Sie das Datenfeld MARKE der Datenbank-Tabelle HERSTELLER.

clip0411

5.Lassen Sie sich vom SQL-Assistenten eine exakt an das Abfrageergebnis angepasste Virtuelle Tabelle generieren. Klicken Sie dazu bei Ziel (Virtuelle Tabelle) auf  vt_create, wählen Sie Virtuelle Tabelle erstellen aus und geben Sie im folgenden Dialog bei Name FAHRZEUGE_JOIN ein.

clip0412

6.Klicken Sie auf OK, um den SQL-Assistenten zu schließen.

 

 

» Existierende Virtuelle Tabellen und Unstimmigkeiten werden erkannt «

Bei der Selektierung einer Datenbank-Tabelle sucht der SQL-Assistent automatisch im Daten-Editor nach einer bereits existierenden, namensgleichen Virtuellen Tabelle, die für die Aufnahme des Abfrageergebnisses geeignet sein könnte und versucht deren Datenfelder richtig zuzuordnen. Wenn der SQL-Assistent fehlende Datenfelder in der Virtuellen Tabelle feststellt und mit catch kennzeichnet, kann die Virtuelle Tabelle so nicht verwendet werden. In so einem Fall können Sie sich vom SQL-Assistenten eine für die Abfrage maßgeschneiderte Virtuelle Tabelle generieren lassen, welche dann automatisch auch im Daten-Editor angelegt wird. Alternativ können Sie die Virtuelle Tabelle vom Assistenten mit den fehlenden Datenfeldern auch erweitern lassen, was jedoch nicht empfehlenswert ist, wenn Sie diese Virtuelle Tabelle bereits an anderer Stelle benutzen.

 

» Existierende Virtuelle Tabelle nicht überschreiben «

Wenn die Virtuelle Tabelle nicht überschrieben werden soll, klicken Sie das Symbol clip0204 . Wählen Sie anschließend aus, ob das Abfrageergebnis vor dem ersten Datensatz der Virtuellen Tabelle eingefügt oder nach dem letzten Datensatz angehängt werden soll.

 

» Verschiedene Join-Typen «

Bei Joins können Sie festlegen, ob es sich um einen Inner, Left, Right oder Outer Join handeln soll. Bei Schritt 2: Joins definieren werden die vom SQL-Assistenten generierten Joins angezeigt.

 

» Generiertes SQL-Statement anzeigen «

Wenn Sie auf SQL anzeigen klicken, können Sie sich das fertig generierte SQL-Statement anzeigen lassen und überprüfen. Das Abändern und Ergänzen der generierten Anweisungen ist jedoch nicht möglich.

 

» Ausgabe des Abfrageergebnisses «

Während der Laufzeit Ihrer Anwendung können Sie das Abfrageergebnis im Debugger überprüfen, indem Sie die Virtuelle Tabelle #FAHRZEUGE im Debugger anklicken. Alternativ können Sie das Abfrageergebnis mit nur geringem Zusatzaufwand auch in einer Table, einem DataGrid oder DBContainer auf dem Bildschirm ausgeben lassen. Alle Komponenten mit denen sich Daten visualisieren lassen, bieten Ihnen dafür eine Methode hmtoggle_plus1 fillFrom ( VirtualTable vt ) | XDEV NLS: fülleAus ( VirtuelleTabelle vt ).

 

 

Hinweis: Bei Datenbankabfragen sollten Sie grundsätzlich bei Schritt 3: Filter festlegen eine Abfrage-Bedingung (Filter) festlegen, da ansonsten alle Daten der Datenbank-Tabelle vollständig in den Speicher geladen werden. Bei entsprechend großen Datenmengen kann es dabei zu einem Speicherüberlauf kommen.

 

Tipp: Das Abfrageergebnis in der Virtuellen Tabelle #FAHRZEUGLISTE können Sie nun mit nur einer weiteren Anweisung in einer Table, einem DataGrid oder DBContainer auf dem Bildschirm ausgeben lassen. Alle Ausgabe-Komponenten bieten Ihnen dafür eine Methode hmtoggle_plus1 fillFrom ( VirtualTable vt ) | XDEV NLS: fülleAus ( VirtuelleTabelle vt ). Zudem können Sie einzelne Datensätze zum Bearbeiten in ein Formular übertragen oder die Daten auf andere Weise weiter verarbeiten.

 

 

Basiswissen: Virtuelle Tabellen.