Announcement

Collapse
No announcement yet.

Filter und Like-Operator

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

  • Filter und Like-Operator

    Moin Moin !

    Ich habe versucht, in einem ADODataSet einen Filter zu setzen:

    Filter := '((PatNr = 103) and (DatenTyp = 1) and (Text Like ''*160*'' Or Text Like ''*161*''))';


    Ich bekomme eine Fehlermeldung, daß Datentypen nicht zueinander passen würden.
    Ich habe die Einzelbedingungen des den Filterausdrucks getestet: keine Fehlermeldung.


    Dann habe ich den versucht den Ausdruck

    select * from Detaildaten where ((PatNr = 103) and (DatenTyp = 1) and (Text Like '*160*' Or Text Like '*161*')) order by Datum asc

    als CommandText des DataSets einzutragen.

    Keine Fehlermeldung, aber auch keine Daten. Der Test des Ausdruckes innerhalb von MS-ACCESS funktioniert perfekt.

    Inzwischen bin ich doch etwas ratlos.

    Als Workaround Filtere ich zur Zeit nur nach PatNr und datentyp, der Rest läuft über eine Schleife und die StringSuche pos('160', Text)

    Das aber ist bei einem Zieldatenbestand von etwa 300.000 Datensätzen nur begrenzt akzeptabel.

    Wer kennt sich mit ADO ein bischen besser aus als ich ?

    Herzlichen Dank und Gruß

    Hauke Gintner


  • #2
    Nachtrag:

    mit dem CommandText

    select * from Detaildaten where ((PatNr = 103) and (DatenTyp = 1)
    order by datum asc

    und dem zusätzlich aufgesetzten Filter
    (Text Like ''*160*'' Or Text Like ''*161*''))'

    bekomme ich das korrekte Ergebnis.

    Ich würde aber gerne verstehen, woran dieses doch sehr merkwürdige Verhalten liegt.

    Hauke Gintne

    Comment


    • #3
      Hallo Hauke,

      so weit ich weiß sind die Jokerzeichen in SQL '%' (für '*') und '_' (für '?'). Außerdem sind einige Datenbanken wählerisch was das Anführungszeichen angeht. Einige verlangen ein ", andere ein ', manche verstehen beides. Das fehlende Ergebnis bei der Eingabe im CommandText wird aus der falschen Verwendung der Jokerzeichen resultieren (oder dem falschen Anführungszeichen).

      Da ich meine Filter über Änderung des CommandTextes realisiere, kann ich Dir zu Filter und Filtered des ADO nichts sagen.

      Grüße Joche

      Comment


      • #4
        Ich habe auch schon versucht, die Filterbedingung im CommandText unterzubringen (WHERE ....). Egal welche Bedingungen ich dort angebe, sobald ich mit LIKE arbeite, bekomme ich keinerlei Datensätze mehr zurück, aber auch keine Fehlermeldung.

        Gruß

        Hauke Gintne

        Comment


        • #5
          Nochmal:

          im CommandText darf nicht stehen:

          SELECT * FROM xyz WHERE (a LIKE '*160*')

          Sondern dort muß stehen:

          SELECT * FROM xyz WHERE (a LIKE '%160%')

          Ob das auch für den Filter gilt weiß ich nicht.

          Joche

          Comment

          Working...
          X