Logisch verknüpfte Bedingungen

Anfang  Zurück  Vor

Letzte Änderung 26.10.2010

 

Bei Datenbankabfragen die nach mehreren Suchbegriffen suchen sollen, benötigen Sie für jeden Suchbegriff eine eigene Abfragebedingung (WHERE Condition). D.h., bei Suchformularen verbirgt sich hinter jeder einzelnen Formular-Komponente eine Abfragebedingung.

 

Zurück zu Filtern mit Such-Formular

 

 

Fortsetzung des Tutorials Filter-Bedingung (WHERE)

 

21.Wechseln Sie in den GUI-Builder und klonen Sie den TextPane zusammen mit dem TextField. Klicken Sie dazu mit gedrückter Shift Taste TextPane und TextField nacheinander an, wählen Sie im Menü Bearbeiten > Klonen und geben Sie anschließend im unteren TextPane Modell: ein.

clip0030

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

23.Lesen Sie nun den Suchbegriff aus dem zweiten TextField aus. Definieren Sie dazu eine weitere String-Variable und weisen Sie auch dieser die Methode getText( ) zu, welche den Text aus dem Textfield ausliest.

String suchbegriff="";

suchbegriff = textField.getText();

 

String gesuchtesModell="";

gesuchtesModell = textField2.getText();

 

try

{

   XDEV.Query(new QueryFahrzeuge(suchbegriff));

}

catch(DBException e)

{

    e.printStackTrace();

}

 

24.Erweitern Sie nun die Datenbankabfrage mit einer weiteren Filter-Bedingung. 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. Klicken Sie auf new_guide, um eine zweite Bedingung anzulegen.

25.Wählen Sie im ersten Auswahlfeld das Datenfeld MODELLE.MODELL aus, welches durchsucht werden soll. Wählen Sie dann den SQL-Operator aus und geben Sie die Variable gesuchtesModell an, welche den ermittelten Suchbegriff enthält.

clip0031

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

 

 

Klammernsetzung durch Einrückung

 

Bei der Angabe mehrerer Abfragebedingungen sieht SQL Klammern vor, um die Zusammengehörigkeit der Abfragebedingungen festzulegen, wodurch der Sinn der Abfrage und das Abfrageergebnis maßgeblich beeinträchtigt werden. Im Query-Assistenten wird eine Klammersetzung durch Einrückung der entsprechenden Abfragebedingungen erreicht. Um eine Abfragebedingung einzurücken, klicken Sie auf clip0033. Einrückungen können jederzeit wieder rückgängig gemacht werden.

 

clip0032

 

 

Generierter Code

 

try

{

   XDEV.Query(new QueryFahrzeuge(suchbegriff,gesuchtesModell));

}

catch(DBException e)

{

    e.printStackTrace();

}

   

 

private static class QueryFahrzeuge extends Query

   {

      QueryFahrzeuge(int maxPreis, int minPreis, String wunschMarke, String wunschModell, String wunschFarbe)

      {

         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("HERSTELLER",getColumn("HERSTELLER","ID").eq(getColumn("MODELLE","HERSTELLER_ID")));

         innerJoin("MODELLE",getColumn("MODELLE","ID").eq(getColumn("FAHRZEUGE","MODELL_ID")));

         where(getColumn("FAHRZEUGE","PREIS").lte("?").AND(getColumn("FAHRZEUGE","PREIS").gte("?")).

                 OR(parenthesis(getColumn("HERSTELLER","MARKE").eq("?").

                 AND(getColumn("MODELLE","MODELL").eq("?")).AND(getColumn("FAHRZEUGE","FARBE_ID").

                 eq("?")))),maxPreis,minPreis,wunschMarke,wunschModell,wunschFarbe);

         

         setVirtualTable(FAHRZEUGE_JOIN.VT);

         setFillMethod(VirtualTableFillMethod.OVERWRITE);

      }

   }