Nichtbeachtung leerer Felder bei Powersuche



  • Hallo!

    Ich habe folgende Situation:
    DBMS + Datenbank

    Ich möchte über eine Powersuche mehrere Parameter gleichzeitig abfragen.
    Der User soll nicht alle Felder ausfüllen brauchen.
    Aber leere Eingabefelder vergleicht er mit der Datenbank, von daher kann er nichts Gleiches finden. Wie kann ich es schaffen, dass die leeren Felder nicht beachtet werden bei der Suche ?
    Es sind 4 Eingabefelder.
    Ich habe da an verschachtelte if-Anweisungen gedacht.
    Habs aber nicht so recht hinbekommen.

    Wäre über Hilfe dankbar.



  • Wie sieht denn die Abfrage der Felder aus ??
    Eine Schleife ??
    FGGF



  • Nein, keine Schleife.
    Ich habe 4 ineinander verschachtelte if-Anweisungen codiert.

    if(Edit1->Text=="")
    {
     if(Edit2->Text=="")
     {
      if(Edit3->Text=="")
      {
       if(Edit4->Text=="")
       {
         ShowMessage....
       }
        Suchergebnis->Query1->SQL->Clear();
        Suchergebnis->Query1->SQL->Add("SELECT <> FROM <>");
        Suchergebnis->Query1->SQL->Add("WHERE <das leere nicht, aber die  anderen> ");
        Suchergebnis->Query1->PrivoxyWindowOpen();
      }
      Suchergebnis...
     }
     Suchergebnis...
    }
    

    Mir ist klar das das nicht funzt...wollte bloß mal zeigen wies ungefähr aussah. Habe den Code wieder gelöscht.



  • Das mit den Verschachtelungen klappt so nicht ganz, es seid denn du setzt voraus, dass das Edit1 leer ist. Ist Edit1 nicht leer, aber 3 und 4 wird er nie zu dieser Abfrage kommen. Am besten du fragst vorher die Felder ab, in denen was steht und schaust dann in der Datenbank nach.
    Musst du dir ne gute Abfrage überlegen um das ganze übersichtlich zu machen. Natürlich kannst du auch alle Möglichkeiten einzeln abfragen. Ist aber umständlich.
    Kannst du voraussetzen, dass wenn die Felder ausgefüllt werden immer zuerst das Edit1, dann da Edit2 usw. und nie Edit2 ohne Edit1 ausgefüllt wird, wirds auch einfacher.

    FGGF



  • Geh die Eingabefelder in einer Schleife durch und füge den Inhalt, so vorhanden, zum Abfragetext hinzu.
    Pseudo-Code:

    String SQL = "SELECT * FROM table WHERE ";
      int counter = 0;
      for (int i = 0; i < EditZahl, i++)
      {
        if (Edit[i]->Text != "")
        {
          if (counter > 0) // mehr als ein Edit mit Inhalt
            SQL + = " OR ";
    
          SQL += "field LIKE " + Edit[i]->Text;
          counter++;
        }
      }
    

    Für die Schleife solltest du mit dynamic_cast arbeiten, Beispiele gibt's in der FAQ unter "Komponenten benutzen"



  • Kriegs jetzt nicht in den Kopf.....
    Greife das Thema zu einem anderen Zeitpunkt nochmal auf.
    Aber danke für den Ansatz! :p

    Pilsbaron


Anmelden zum Antworten