[gelöst] Setfilter mit Klammern im Filterstring

25. September 2008 08:55

Hallo,

ich möchte auf ein Textfeld filtern.
Der Feldinhalt enthält jedoch Klammern und diverse Sonderzeichen, z.b. sowas wie = Z438-#667(1234).

Wenn ich nun ein

Variable.Setfilter(Beschreibung,Z438-#667(1234))

mache, geht das natürlich schief und man bekommt die Fehlermeldung, dass der Filter ungültig ist.

Wenn ich selbst manuell auf das Feld filtern möchte, packe ich den Filterbegriff in Hochkommata -> 'Z438-#667(1234)'
Dann funktioniert das auch.

Nur wie baue ich mir einen solchen Filter in der Programmierung?

Suchbegriff := 'Z438-#667(1234)';
Filterstring := ''' + Suchbegriff + ''' funktioniert so leider nicht ....

Vielen Dank im Vorraus...
Zuletzt geändert von any1 am 25. September 2008 11:31, insgesamt 1-mal geändert.

Re: Setfilter mit Klammern im Filterstring

25. September 2008 09:03

Moin,
zum einen hätte der Befehl so geschrieben werden müssen:
Code:
Variable.Setfilter(Beschreibung, 'Z438-#667(1234)');

(also mit Apostrophs um den Ausdruck heru, da der Compiler sonst keinen String daraus erkennen kann.

Wenn auch das noch immer nicht klappen sollte, würde ich es so versuchen (habs jetzt aber nicht getestet):
Code:
Suchbegriff := 'Z438-#667(1234)';
Filterstring := STRSUBSTNO(%1Suchbegriff%1, '''');
...

Re: Setfilter mit Klammern im Filterstring

25. September 2008 09:33

Das Problem an der Sache ist ja, dass ich den Suchbegriff dynamisch zusammen setzen möchte.
Der Filterstring wird also auf jeden Fall eine Variable sein, und ich kann die Apostrophs da nicht einsetzen .
Dann würde er ja die Variable als Textstring sehen...

Variable.Setfilter(Beschreibung, 'Z438-#667(1234)');
->
Variable.Setfilter(Beschreibung, Filterstring);

Dein Beispiel mit dem STRSUBSTNO funktioniert so leider auch nicht.
Ich bastel ebenfalls mal weiter.

Trotzdem vielen Dank für deine Mühe.

Re: Setfilter mit Klammern im Filterstring

25. September 2008 09:39

Filterstring:= STRSUBSTNO('%1' + Suchbegriff + '%2','''','''');

Das ergibt :

%12062-2242-000 (29.05.2008)'

%2 ersetzt er also durch ein Apostropf, wieso nicht %1 ?

Re: Setfilter mit Klammern im Filterstring

25. September 2008 09:42

Hatte mich verschrieben, versuchs mal so:
Code:
Suchbegriff := 'Z438-#667(1234)';
Filterstring := '''' + Suchbegriff + '''';
...

Re: Setfilter mit Klammern im Filterstring

25. September 2008 09:48

Ich verstehe nicht, wieso unbedingt Apostrophs darum gebaut werden müssen?

Wieso nicht einfach Suchbegriff zusammenstellen
(oder Suchbegriff := 'Z438-#667(1234)') und dann
Variable.Setfilter(Beschreibung, Suchbegriff);

Re: Setfilter mit Klammern im Filterstring

25. September 2008 09:55

Weil als Filterkriterium auch Klammerausdrücke verwendet werden können. Es ist z.B. möglich "(C*|S*)" zu filtern. Ohne die einschließenden Hochkommata kann NAV die Ausdrücke nicht eindeutig auswerten. Das gleiche hast du im Excel. Versuch mal in eine als General formatierte Zelle +42 einzutragen. Das wird nur gehen, wenn du einen weiteren Hinweis gibst, was es sein soll. Also entweder als Text formatieren oder mit einem Hochkomma als Prefix.

Re: Setfilter mit Klammern im Filterstring

25. September 2008 09:58

in der programmierung steht ein apostroph dafür, dass es ein string ist, wenn du kein apostroph darum baust, denkt der compiler, dass es eine variable ist, du musst also für den setfilter die apostrophe in zwei weitere apostrophe hüllen, wenn ich mich nicht ganz täusche, hat natalie zu viele verwendet, so würde ichs basteln

Code:
Filter := 'Z438-#667(1234)';
Filter := ''' + Filter + ''';

Re: Setfilter mit Klammern im Filterstring

25. September 2008 10:05

Der Code von Natalie funktioniert.
Ich weiss auch nicht wieso man 4 Apostrophs einbauen muss, aber mit 3 klappt es nicht.

Re: Setfilter mit Klammern im Filterstring

25. September 2008 10:11

hmm ich dachte mit einem einfachen apostroph könnte er auch filtern

Re: Setfilter mit Klammern im Filterstring

25. September 2008 10:18

Sebastian Pfliegel hat geschrieben:hmm ich dachte mit einem einfachen apostroph könnte er auch filtern

Nicht wenn Sonderzeichen im Filterstring vorhanden sind :roll:

Re: Setfilter mit Klammern im Filterstring

25. September 2008 11:16

Sebastian Pfliegel hat geschrieben:
Code:
Filter := 'Z438-#667(1234)';
Filter := ''' + Filter + ''';


Das funktioniert nicht, da in obigem Beispiel die Variable Filter dann den Wert >' + Filter + '< (ohne ><) enthält.

Filter := '''' + Filter + '''';

1. ' => Einleitendes Hochkomma für folgende Konstante
2. + 3. ' => Quasi ein Escape für ein Hochkomma innerhalb einer Konstanten, da einem einzelnen Hochkomma die Bedeutung "Ende der Konstante" zukommt.
4. ' => Beenden der Konstanten.

Re: Setfilter mit Klammern im Filterstring

25. September 2008 11:31

Ok, nach 3x Lesen hab ichs verstanden denke ich.
Besten Dank :-)

Re: [gelöst] Setfilter mit Klammern im Filterstring

25. September 2008 14:57

Das ist zwar jetzt keine Lösung, aber die brauchst du vielleicht garnicht: Kannst du die Klammern nicht einfach durch das Wildcard ? ersetzten oder liefert dir dieser unscharfe Filter falsche Ergebnisse?

Re: [gelöst] Setfilter mit Klammern im Filterstring

25. September 2008 14:58

Ja, ich brauche leider den kompletten Suchstring.
Daher kam überhaupt erst das Problem auf :-|