Filtern mit Such-Formular

Anfang  Zurück  Vor

Letzte Änderung 26.10.2010

 

Bei einer Datenbankabfrage erhalten Sie standardmäßig alle Datensätze der jeweiligen Datenbank-Tabelle als Abfrageergebnis. Dies kann zu unnötig langen Ladezeiten, zu unübersichtlichen Tabellen auf dem Bildschirm und bei großen Datenbeständen sogar zu einem Speicherüberlauf führen. Dies lässt sich durch gezieltes Filtern der Daten vermeiden.

 

Ein Filter wird grundsätzlich als Bedingung (WHERE) formuliert. Die Datenbank liefert dadurch nur noch die Daten aus, welche die Filter-Bedingung mit Wahr erfüllen. Eine Bedingung setzt sich aus dem Datenfeld das durchsucht werden soll, einem speziellen SQL-Operator und dem jeweiligen Suchbegriff zusammen.

 

Der Suchbegriff ist i.d.R. variabel und wird meist vom Anwender mit Hilfe eines Such-Formulars angegeben. Die angegebenen Suchbegriffe müssen dann mit Hilfe entsprechender Methode von den Formular-Komponenten ausgelesen werden. Das Auslesen kann wahlweise schon vor der Datenbankabfrage oder direkt in der Filter-Bedingung im Query-Assistenten erfolgen.

 

Fortsetzung von: Abfrage mehrerer Tabellen

 

 

Tutorial Filter-Bedingung konstruieren

 

11.Erweitern Sie die Datenbankabfrage mit einem Filter. Bewegen Sie dazu den Mauszeiger mit gedrückter Shift Taste auf die Datenbankabfrage XDEV.Query und klicken Sie diese dann an, um den Query-Assistenten aufzurufen.

12.Klicken Sie im Query-Assistenten bei Filter auf new_guide, um eine Filter-Bedingung anzulegen.

13.Wählen Sie in der ersten Combobox das Datenfeld aus, das durchsucht werden soll.

clip0021

14.Wählen Sie in der zweiten Combobox einen SQL-Operator aus.

Where

15.Geben Sie nun im Textfeld den Suchbegriff an, z.B. "BMW".

16.Klicken Sie im Query-Assistenten auf OK, um den Assistenten zu schließen.

Hinweis: Bei dem Suchbegriff kann es sich sowohl um einen festen, statischen Wert (z.B. "BMW"), um eine Variable (z.B. hersteller) oder um eine Methode handeln (z.B. textField.getText( )).

 

 

Variable als Suchbegriff

 

I.d.R. wird der Suchbegriff kein fester, sondern ein variabler Wert sein, der mit Hilfe einer Variable angegeben wird. Diese Variable müssen Sie bereits vor der Datenbankabfrage definieren und dieser anschließend den Suchbegriff als Wert zuweisen. Häufig wird der Suchbegriff aus einer Suchmaske ausgelesen, was mit Hilfe einer Methode möglich ist.

 

17.Wechseln Sie in den GUI-Builder, verschieben Sie den Button nach rechts, fügen Sie ganz links einen TextPane ein, geben Sie Marke: ein und fügen Sie daneben ein TextField ein.

clip0023

18.Selektieren Sie den Button und wechseln Sie in die Code-Ansicht. Klicken Sie dazu auf {} Code.

19.Lesen Sie nun den Suchbegriff aus dem Textfield aus. Definieren Sie dazu vor der Datenbankabfrage eine String-Variable und weisen Sie dieser die Methode textField.getText( ) zu, welche den Text aus dem Textfield ausliest.

String suchbegriff="";

suchbegriff = textField.getText();

 

try

{

   XDEV.Query(new QueryFahrzeuge());

}

catch(DBException e)

{

    e.printStackTrace();

}

 

20.Ändern Sie nun die Filter-Bedingung der Datenbankabfrage. Bewegen Sie dazu den Mauszeiger mit gedrückter Shift Taste auf die Datenbankabfrage XDEV.Query und klicken Sie diese dann an, um den Query-Assistenten aufzurufen. Geben Sie bei der Filter-Bedingung im rechten Textfeld die Variable suchbegriff an.

clip0024

21.Klicken Sie im Query-Assistenten auf OK, um den Assistenten zu schließen.

 

 

Methoden-Aufruf liefert Suchbegriff

 

An Stelle einer Variable können Sie in der Filter-Bedingung auch direkt eine Methode angeben, welche den Suchbegriff ermittelt, z.B. textField.getText( ).

 

clip0025

 

Hinweis: Durch die Angabe einer Methode in der Filter-Bedingung wird zwar der Programmcode etwas schlanker, das Programm lässt sich damit jedoch nicht mehr so präzise debuggen, was die Fehlersuche erschweren kann.

 

 

Generierter Code

 

try
{
   XDEV.Query(new QueryFahrzeuge(suchbegriff));
}
catch(DBException e)
{
   e.printStackTrace();
}

 

 

private static class QueryFahrzeuge extends Query
   {
      QueryFahrzeuge(String suchbegriff)
      {
         setDataSource(fahrzeugeDB.DB);
         
         select("FAHRZEUGE","ID").into(FAHRZEUGE_JOIN.FAHRZEUGE_ID);
         select("FAHRZEUGE","BILDPFAD").into(FAHRZEUGE_JOIN.FAHRZEUGE_BILDPFAD);
         select("MODELLE","MODELL").into(FAHRZEUGE_JOIN.MODELLE_MODELL);
         select("HERSTELLER","MARKE").into(FAHRZEUGE_JOIN.HERSTELLER_MARKE);
         select("FAHRZEUGE","LEISTUNG").into(FAHRZEUGE_JOIN.FAHRZEUGE_LEISTUNG);
         select("FAHRZEUGE","ERSTZULASSUNG").into(FAHRZEUGE_JOIN.FAHRZEUGE_ERSTZULASSUNG);
         select("FAHRZEUGE","KILOMETERSTAND").into(FAHRZEUGE_JOIN.FAHRZEUGE_KILOMETERSTAND);
         select("FAHRZEUGE","FAHRZEUGTYP_ID").into(FAHRZEUGE_JOIN.FAHRZEUGE_FAHRZEUGTYP_ID);
         select("FAHRZEUGE","FAHRZEUGART_ID").into(FAHRZEUGE_JOIN.FAHRZEUGE_FAHRZEUGART_ID);
         select("FAHRZEUGE","KRAFTSTOFF_ID").into(FAHRZEUGE_JOIN.FAHRZEUGE_KRAFTSTOFF_ID);
         select("FAHRZEUGE","GETRIEBE_ID").into(FAHRZEUGE_JOIN.FAHRZEUGE_GETRIEBE_ID);
         select("FAHRZEUGE","FARBE_ID").into(FAHRZEUGE_JOIN.FAHRZEUGE_FARBE_ID);
         select("FAHRZEUGE","PREIS").into(FAHRZEUGE_JOIN.FAHRZEUGE_PREIS);
         from("FAHRZEUGE");
         innerJoin("MODELLE",getColumn("MODELLE","ID").eq(getColumn("FAHRZEUGE","MODELL_ID")));
         innerJoin("HERSTELLER",getColumn("HERSTELLER","ID").eq(getColumn("MODELLE","HERSTELLER_ID")));
         where(getColumn("HERSTELLER","MARKE").eq("?"),suchbegriff);
         
         setVirtualTable(FAHRZEUGE_JOIN.VT);
         setFillMethod(VirtualTableFillMethod.OVERWRITE);
      }
   }