Parameter-Queries für voneinander abhängige Parameter

Hoch  Zurück  Vor

Die Möglichkeit, Auswahlmöglichkeiten für beispielsweise eine ComboBox per Loader-Query aus der Datenbank auszulesen (wie im Artikel Dynamische Auswahlmöglichkeiten per Loader-Query beschrieben) kann eine praktische Sache sein. Die Loader-Queries unterliegen allerdings auch Einschränkungen: So ist es beispielsweise nicht möglich, die Auswahlmöglichkeiten in Abhängigkeit anderer Parameter zu aktualisieren. Um dies zu bewerkstelligen, müssen Sie Parameter-Queries und die dazugehörigen Steuerelemente DBLookup oder DBCombo verwenden.

 

Im bereits erwähnten Beispiel kann der Benutzer alle Personen mit einem bestimmten Alter anzeigen lassen und dazu das Mindest- und das Maximalalter auswählen, wozu zwei ComboBoxen verwendet werden, deren Auswahlmöglichkeiten über ein Loader-Query festgelegt werden. Bei beiden ComboBoxen wird die selbe Loader-Query verwendet, weshalb auch beide die selben Auswahlmöglichkeiten bieten. Dies hat zur Folge, dass der Benutzer ein Maximalalter wählen kann, dass niedriger ist, als das bereits gewählte Minimalalter. Dies wiederum würde zu einer leeren Rückgabetabelle führen.

 

Dieses Problem lässt sich mit Loader-Queries leider nicht lösen, denn diese Queries werden einmal vor der Anzeige des Eingabedialogs ausgeführt. Die Auswahlmöglichkeiten lassen sich also nicht in Abhängigkeit voneinander aktualisieren. Loader-Queries sind eigentlich eher dafür gedacht, häufig verwendete Einträge für Steuerelemente in eine Datenbank auszulagern, statt diese für jedes Template wieder über die Eigenschaft ResultOption zu definieren. Dies verringert den Wartungsaufwand enorm, beispielsweise wenn solche häufig verwendeten Auswahlmöglichkeiten einmal angepasst werden müssen: Statt jedes Template zu bearbeiten, genügt es die Einträge der Tabelle zu bearbeiten, die diese enthält.

 

Für die dynamische Auswahl von Parameterwerten, basierend auf Inhalten der abgefragten Datenbank, sind die Steuerelemente DBLookup und DBCombo in Verbindung mit Parameter-Queries wesentlich besser geeignet: Parameter-Queries werden immer wieder ausgeführt, wenn der Benutzer eine Auswahl über das jeweilige Steuerelement treffen will. Dadurch ist es beispielsweise möglich, die Auswahlmöglichkeiten für das Maximalalter immer abhängig vom Minimalalter zu machen:

 

1 Legen Sie ein neues Template an und geben Sie als Hauptabfrage (Main) folgendes Script an:

SELECT * FROM adr

  WHERE YEAR (CURDATE()) - YEAR(gdatum) >= :PARAM_MINALTER

  AND YEAR(CURDATE()) - YEAR(gdatum) <= :PARAM_MAXALTER

 

2 Klicken Sie im Menü unter SQL-Abfragen und Scripte auf den Button Neu.

ParamQuery_001

3 Wählen Sie im Dialog den Punkt Parameter-Query aus und klicken Sie auf OK. Dies legt ein neues Query-Script an, mit dem Namen PARAM_01. Weitere Scripte werden fortlaufend durchnummeriert.

ParamQuery_002

4 Geben Sie für das neue Parameter-Query folgendes Script an:

SELECT YEAR(CURDATE()) - YEAR(gdatum) "ID" 

  FROM adr

  GROUP BY 1

  ORDER BY 1

 

5 Wiederholen Sie Schritt 2 und 3 und verwenden Sie folgendes Script als Parameter-Query:

SELECT YEAR(CURDATE()) - YEAR(gdatum) "ID"

  FROM adr

  WHERE YEAR(CURDATE()) - YEAR(gdatum) >= :PARAM_MINALTER  

  GROUP BY 1

  ORDER BY 1

 

6 Fügen Sie zweimal das Steuerelement DBCombo in die Parametermaske ein und weisen Sie einem davon den Parameter PARAM_MINALTER und das Parameter-Query PARAM_01 und dem anderen den Parameter PARAM_MAXALTER und das Parameter-Query PARAM_02 zu.

ParamQuery_003

7 Speichern Sie das Template und klicken Sie auf Testen. Nachdem Sie einen Wert für das Minimalalter ausgewählt haben, können Sie als Maximalalter nur noch Werte auswählen, die größer oder gleich dem Minimalalter sind.

ParamQuery_004