Announcement

Collapse
No announcement yet.

Suche über zwei Spalten im DBGrid

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Suche über zwei Spalten im DBGrid

    Hallo,

    ich möchte in einem DBGrid eine suche über zwei Spalten erstellen! Derzeit läuft die Suche nur über eine Spalte, mit folgendem Code:

    AnsiString SearchName1 = SearchClientDS->Fields->Fields[0]->FieldName;
    TLocateOptions SearchOptions;
    SearchOptions.Clear();
    SearchOptions << loPartialKey;
    SearchOptions << loCaseInsensitive;
    SearchClientDS->Locate(SearchName1, SearchEdit->Text, SearchOptions);


    Nun hab ich Probleme dem Locate() die zweite Spalte zu übergeben in der er suchen soll (SearchName2)!

    Kann ich das überhaupt dann noch so machen oder muss ich daß dann anders angehen??

    Wäre für eure Hilfe sehr dankbar!

    lg
    Florian

  • #2
    Hallo Florian,

    im folgenden Beispiel werden 5 Suchkriterien an Locate übergeben:
    <PRE>
    TLocateOptions Opts;
    Opts.Clear();
    Variant locvalues[5];
    locvalues[0] = Variant(CurFANr);
    locvalues[1] = Variant(CurKAufNr);
    locvalues[2] = Variant(CurKAufPos);
    locvalues[3] = Variant(CurKAufUPos);
    locvalues[4] = Variant(CurUeFANr);
    qfaview->Locate("fanr;kaufnr;kaufpos;kaufupos;uefanr", VarArrayOf(locvalues, 4), Opts);
    </PRE>

    Ich hoffe, das hilft Dir weiter...

    Grüße Joche

    Comment


    • #3
      Hey Jochen,

      danke für den Tipp! Leider hilft er mir nicht wirklich weiter! Ich hab vorhin vergessen zu erwähnen das die zu suchenden Worte in eine Textfeld ,über dem DBGrid eingegeben werden. Sprich ich kann die Suchworte nicht festlegen!

      lg
      Fl

      Comment


      • #4
        ups sorry, hätte wohl ein bißchen ausführlicher sein können.

        Das sind keine festen Suchbegriffe sondern Variablen die vorher auf einen bestimmten Wert gesetzt wurden. Du mußt nicht die Suchwörter kennen, sondern nur die Feldnamen in denen gesucht werden soll.

        Alle Variablen die mit Cur.. beginnen sind vom Typ int (kann aber auch String sein) und wurden vorher auf bestimmte Werte gesetzt. Die Bezeichner fanr, kaufnr, kaufpos, kaufupos und uefanr sind die Tabellenbezeichner (Feldnamen) aus der Tabelle, sprich sie repräsentieren eine Teilmenge der Felder aus dem Select.

        Hilft Dir das, sonst mach ich ein übersichtlicheres Beispiel, wird dann aber morgen...

        Joche

        Comment


        • #5
          So langsam verstehr ich es!
          Ein Beispiel wäre wirklich super!
          Danke für Deine Zeit und Geduld!

          lg
          Fl

          Comment


          • #6
            Hallo Flo,

            <PRE>
            AnsiString SearchString1 = SearchEdit->Text;
            AnsiString SearchString2 = ???;
            //
            TLocateOptions Opts;
            Opts.Clear();
            Opts << loPartialKey;
            Opts << loCaseInsensitive;
            //
            Variant locvalues[2];
            locvalues[0] = Variant(SearchString1);
            locvalues[1] = Variant(SearchString1);
            //
            qfaview->Locate("[Feldname aus Tabelle für Suchstring1], [Feldname aus Tabelle für Suchstring2]", VarArrayOf(locvalues, 1), Opts);
            </PRE>

            Hm, je länger ich mir das ansehe, desto mehr glaube ich, daß Du einen Suchbegriff in 2 Spalten suchen willst. Ob das mit Locate überhaupt geht kann ich dir nicht sagen. Es kann sein, daß tatsächlich in beiden Spalten der Suchbegriff vorkommen muß.<BR>
            Ich löse so etwas über eine TQuery, deren SQL-Anweisung ich zur Laufzeit ändere. Im Prinzip erstelle ich einen Select ohne Bedingungen, speicher mir diesen als Basis in eine TStringList und füge die Where-Klausel dynamisch zur Laufzeit hinzu. Sehr flexibel und außerdem werden nur in Frage kommende Datensätze angezeigt.

            Grüße Jochen

            Grüße Joche

            Comment


            • #7
              Stimmt ich möchte einen Begriff in beiden Spalten suchen! Ich hab hier z.B. ein Grid mit PLZ und Ortsnamen. Wenn ich in das Suchfeld z.B. Wien eingebe sollen mir alle Einträge mit Wien makiert werden wenn ich eine Postleitzahl eingebe dann halt die Zeile mit der Postleitzahl!

              Ich werd mir mal Deinen Vorschlag mit dem TQuery ansehen! Danke für die Hilfe!

              Grüße Fl

              Comment


              • #8
                Na ja, wenn Du entweder nach PLZ oder nach Ort suchen willst, solltest Du eben auch nur nach dem Suchbegriff in der entsprechenden Spalte suchen. Dazu reicht ja dann ein Parameter im Locate. Aber ich würde zwei TEdits nehmen, eins für die Eingabe der zu suchenden PLZ und eins für den zu suchenden Ort. Je nachdem welches Edit gefüllt ist, weißt Du in welcher Tabellenspalte gesucht werden soll...

                Grüße Joche

                Comment

                Working...
                X