Datenbankabfragen

Previous  Next

 

 

 

Letzte Änderung 01.11.2009

Filter-Bedingung generieren lassen

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

 

clip0429

 

Für ein Such-Formular muss für jedes Eingabe- oder Auswahl-Feld eine Abfrage-Bedingung konstruiert werden. Bei größeren Such-Formularen ist dadurch der Aufwand für die Konstruktion der Datenbankabfrage enorm groß. Nicht selten müssen bis zu 30 oder mehr Bedingungen konstruiert werden. Diese müssen zudem bei jeder Änderung am Formular überarbeitet werden, u.a. wenn ein Suchkriterium hinzu kommt oder weg fällt, was darüber hinaus eine große Fehlerquelle darstellt.

 

Mit Hilfe der Komponente Formular können Sie sich die Abfrage-Bedingungen für ein ganzes Formular automatisch generieren lassen. Sie sparen sich dadurch eine Menge Tipparbeit, kostbare Zeit und schalten gleichzeitig eine erhebliche Fehlerquelle aus. Dazu bietet Ihnen das Formular die Methode hmtoggle_plus1 createWhereCondition( ) | XDEV NLS: erzeugeAbfrageBedingung( ), welche die Werte aller Eingabe- und Auswahlfelder ausliest, die entsprechenden Abfrage-Bedingungen generiert und diese automatisch miteinander verknüpft.

 

» Wahl des logischen Operators «

Bei Verwendung der Methode müssen lediglich festlegen, wie die erzeugten Abfrage-Bedingungen miteinander verknüpft werden sollen, in dem Sie einen logischen Operator als Parameter übergben. I.d.R. soll jedes Suchkriterium das Treffer-Ergebnis weiter eingrenzen, z.B. Automarke = VW, Modell = Golf, Farbe = rot usw. Um die gewünschte Eingrenzung zu erreichen, muss jede einzelne Bedingung erfüllt werden, sprich wahr sein. Dies erreichen Sie nur, wenn Sie alle Abfrage-Bedingungen miteinander logisch UND verknüpfen. Der Methode müssen Sie dafür die englische Bezeichnung AND als Parameter übergeben. Der Parameter wird für die Verknüpfung aller Bedingungen des Such-Formulars verwendet.

 

» Ausschluss von Werten (NOT-Operator) «

Manchmal sollen jedoch einzelne Suchkriterien explizit aus dem Abfrageergebnis ausgeschlossen werden, z.B. Automarke = VW, Modell NICHT Golf. Um einen entsprechenden Ausschluss zu erreichen, müssen Sie lediglich in den Eigenschaften der betreffenden Formular-Komponente bei Filter-Option die Einstellung Exklusive auswählen. Dadurch wird beim Erzeugen der Abfrage-Bedingung der Operator überschrieben, den Sie der Methode als übergeben haben.

 

» Filter-Genauigkeit «

Auch die Filter-Genauigkeit, die Sie mit Hilfe der SQL-Operatoren = oder LIKE angegeben wird, lässt sich in den Eigenschaften der jeweiligen Formular-Komponenten bei Filter-Genauigkeit einstellen.

 

» Mapping «

Da Formular-Komponenten ursprünglich keine Verbindung zu irgendwelchen Datenfeldern haben, müssen Sie alle Formular-Komponenten des Such-Formulars noch mit einem entsprechenden Datenfeld verknüpfen. Die Verknüpfung ist einfach und erfolgt per Drag&Drop.

 

 

 

Fortsetzung des Beispiels Abfrage mehrerer Datenbank-Tabellen (Joins):

 

7.Wechseln Sie in den GUI-Builder und verschieben Sie den Button nach rechts und fügen Sie links ein Formular ein.
6.Fügen Sie in das Formular einen Text-Container ein, geben Sie Marke: ein und fügen Sie daneben ein Textfield ein.   
7.Klonen Sie den Text-Container, ändern Sie den Text in Modell: um und klonen Sie dann das Textfield.

clip0424

 

 

Verknüpfung von Formular-Komponenten und Datenfelder:

 

8.Klicken Sie im Projektmanagement auf Virtuelle Tabellen, klicken Sie mit Doppelklick auf HERSTELLER und ziehen Sie das Datenfeld MARKE auf das Textfield im Formular bei Marke:, um das Eingabefeld mit dem Datenfeld zu verknüpfen.
9.Klicken Sie mit Doppelklick auf MODELLE und ziehen Sie das Datenfeld MODELL auf das Textfield im Formular bei Modell:, um das Eingabefeld mit dem Datenfeld zu verknüpfen.

clip0426

 

 

Abfrage-Bedingung generieren lassen:

 

10.Selektieren Sie den Button, wechseln Sie in die Code-Ansicht, klicken Sie die Datenbankabfrage an, um den SQL-Assistenten aufzurufen und klicken Sie dann im SQL-Assistenten auf Schritt 3: Filter festlegen.
11.Klicken Sie in der GUI-Ansicht das Formular an, um alle Methoden des Formulars in der Bibliothek anzuzeigen und ziehen Sie die Methode hmtoggle_plus1 createWhereCondition( ) | XDEV NLS: erzeugeAbfrageBedingung( ) in den SQL-Assistenten bei Bedingung.
12.Geben Sie im folgenden Parameter-Assistenten "AND" als logischen Operator an und klicken Sie auf OK.

clip0425

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

 

 

Hinweis: Mit hmtoggle_plus1 createWhereCondition( ) | XDEV NLS: erzeugeAbfrageBedingung( ) lassen sich sicher nicht alle erdenklichen Fälle abschließend abdecken, da u.a. Klammersetzung zwischen den erzeugten Abfrage-Bedingungen so nicht möglich ist. In der Praxis werden Sie jedoch die meisten Anforderungen damit sehr gut umsetzen können und sich dabei enorm viel Aufwand, Zeit und Ärger ersparen.

 

Tipp: Ob Sie für Ihr Suchformular Eingabe- oder Auswahlfelder (Comboboxen) verwenden sollen, müssen Sie im Einzelfall entscheiden. Comboboxen bieten sich vor allem dann an, wenn nur wenige Suchbegriffe möglich sind. Mit sehr vielen Einträgen wirkt die Combobox-Liste jedoch schnell unübersichtlich und wird unkonfortabel. Während mit der Combobox nur eindeutige Suchbegriffe möglich sind, lässt sich mit Hilfe eines Textfields i,.V.m. dem LIKE Operator auch nach Wortfragmenten suchen.

 

 

Basiswissen: Virtuelle Tabellen, Datenbankabfragen, Formulare, Formular-Komponenten