Announcement

Collapse
No announcement yet.

TLocateOptions loPartialKey teilstring nur wenn von Anfang vollständig?

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

  • TLocateOptions loPartialKey teilstring nur wenn von Anfang vollständig?

    Hallo,
    in den Beispielen zu TLocateOptions mit der Option loPartialKey sind nur von Teil-Suchstrings
    angegeben,die von Anfang vollständig sind:
    Bsp: Zu findender String "1234567890"

    gefunden wird nur wenn Teilstring z.B. 123, 1234, 12345... usw. ist.
    nicht gefunden wird 3456, 678 usw. genau die sollen auch gefunden werden!

    Das ist doch schei....e.
    Gibts da noch eine Lösung, Workaround?

    Beispielcode:
    AnsiString teilenummer="2345";
    TLocateOptions Opts;
    Opts.Clear();
    Variant locvalues[2];
    locvalues[0] = Variant(teilenummer);
    locvalues[1] = "P";
    DBGrid2->DataSource->DataSet->Locate("TEILNR", VarArrayOf(locvalues, 1), Opts);

  • #2
    Hast du es mal mit einer RegEx probiert-> wobei du im obigen Fall überhaupt erstmal definieren musst, was du finden willst. Die einzige Bedingung, die ich sehe ist, das die Ziffern aufeianderfolgend sein sollen. Wüsste jetzt nicht, wie das in einem Ausdruck definiert werden sollte. Ansonsten wäre \d*234\d* mal zu probieren (ggf. entwerten). Das würde irgendwo die Zeichenfolge suchen...
    Christian

    Comment


    • #3
      1234567890 sollte gefunden werden s.o. das war nur ein Beispiel. In meiner Testdatenbank soll 07080301061206120014 gefunden werden.

      Nein RegEx geht auch nicht. Ich habe aber auch mal den TIBFilterDialog ausprobiert und hier funktioniert
      lediglich der Suchtyp "Genaue Übereinstimmung"Unbenannt.JPG alle anderen finden nichts.
      Bei dem Beispiel oben funktioniert wenigstens die teilweise Suche wenn der Suchstring von Anfang an vollständig ist.
      (C++Builder 2009)
      Zuletzt editiert von hawiwo; 16.08.2012, 13:32.

      Comment


      • #4
        Es sollte doch 07080 am Anfang, 20014 am Ende und 01061 mittendrin gefunden werden. Das 07080301061206120014 nicht am Anfang, Ende und mittendrin gefunden werden könnte die Begründung sein, dass der String eben nicht am Anfang, Ende oder mittendrin ist,
        Christian

        Comment


        • #5
          das hab ich ja nicht versucht. Im Screenshot steht "070803010612061200" und das ist der Anfang von "07080301061206120014"
          Mal etwas einfacher:
          Feldwert = "07080" bzw. "07080\d+" bzw. "07080*", Suchtyp = "Teilw. Übereinst. am Anfang" -> Kein datensatz gefunden obwohl ein Datensatz mit TEILNR="07080301061206120014" existiert.
          Feldwert = "14", Suchtyp = "Teilw. Übereinst. am Ende" -> Nichts wird gefunden.
          usw....
          Lediglich Feldwert = "07080301061206120014", Suchtyp = "Genaue Übereinstimmung" findet den gewünschen Datensatz. FRUST ...Geht einfach nicht.

          Comment


          • #6
            loPartialKey sucht Teilstrings von links - wie du bereits festgestellt hast.

            Ein echtes LIKE bzw. Platzhalter gehen meines Wissens nach darüber leider nicht.

            Wenn es nicht gleich über die Datenbank geht, würde ich das -nicht schön, aber selten- sinngemäß so lösen

            dataset.disablecontrols;
            bm:=dataset.getBookmark;
            dataset.first; // ggf. auch nicht - für den 'nächsten' Treffer
            // suche passenden Satz in einer einfachen Schleife
            if dataset.eof then dataset.gotoBookmark // nix gefunden -> cursor bleibt stehen
            dataset.enablecontrols;

            Grüße
            Tino
            Ich habs gleich!
            ... sagte der Programmierer.

            Comment

            Working...
            X