Filter setzen [erledigt"

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Filter setzen [erledigt"

Beitrag von Wolfgang_B »

hi,

ich will einen Filter auf ein Feld setzen, das einen Matchcode enthält z.B. -> "0001 3465 888 0001". Hier möchte ich als Filter verwenden ->

Code: Alles auswählen

SET FILTER TO SUBSTR(matchcode,1,4) == mandant
GO TOp
(wobei Mandant "0001" enthält). Hiermit bekomme ich kein Ergebnis. Wenn ich den Wert vorher in eine eigene Variable extrahiere
var == SUBSTR(matchdoce,1,4) und dann den Filter mit der var setze "SET FILTER TO var == mandant funktionierts.

Geht sowas grundsätzlich nicht?

Gruß Wolfgang
Zuletzt geändert von Wolfgang_B am So, 11. Mär 2018 17:41, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Filter setzen

Beitrag von Tom »

Verändert sich "matchcode" durch die Navigation in der Tabelle? Wenn "matchcode" eine Variable ist, sollte das funktionieren, aber wenn das ein Tabellenfeld ist, verändert es sich durch Navigation, so dass es schon beim "Go Top" nicht mehr stimmen muss (wenn also der Filter selbstreferentiell ist).
Herzlich,
Tom
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Filter setzen

Beitrag von Wolfgang_B »

Hallo Tom,

matchcode ist ein Tabellenfeld. Das kann sich natürlich während des Laufs verändern. Also doch nur mit Variable. Wäre ja auch zu schön gewesen.

Vielen Dank
Gruß Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Filter setzen

Beitrag von Tom »

Hallo, Wolfgang.

Filterausdrücke werden mit jeder Navigation in der Tabelle evaluiert. Ist die Tabelle selbst Bestandteil des Filterausdrucks, verändert der sich dann auch inhaltlich. Ich nehme an, Du willst alle anderen Kunden holen, die eine gleiche Eigenschaft wie der aktuelle Kunde haben. Da gibt es dann nur den Weg, diese Eigenschaft irgendwie wegzuspeichern und auf die Speicherung zuzugreifen, sonst ändert sich die abgefragte Eigenschaft mit jeder Navigation (und man bekommt letztlich alle Datensätze als Antwort). Das geht entweder über eine Variable oder so:

Code: Alles auswählen

SET FILTER TO &("Mandant == '"+Left(matchcode,4)+"'")
Hier wird "matchcode" auch nur ein einziges Mal angefasst, wie beim Umkopieren in eine Variable. Der Nachteil besteht darin, dass jetzt der Makroexpander mit jeder Navigation zuschlagen muss, was Zeit kosten kann. Aber solche Mechanismen sind ganz elegant, wenn man extrem flexibel arbeiten will. Letztlich setzt man SELECT-Statements auch auf diese Weise zusammen. Man kann das noch etwas weiter treiben und mit detached LOCALs und der Funktion DbSetFilter arbeiten, dann holt man den Zeitverlust möglicherweise wieder rein. Bei sehr überschaubaren Tabellen ist der aber kaum messbar.
Herzlich,
Tom
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Filter setzen

Beitrag von Wolfgang_B »

wie schon mal bemerkt ... endlich mal vernünftig und verständlich erklärt!

Es ist tatsächlich so, ich will alle Rechnungen des Mandanten "0001" haben. Dein Beispiel mit dem Makro-Operator werde ich mir mal näher zu Gemüte führen. Das kann man sicher noch anderswo gebrauchen.

Dann erstmal Danke und Gruß
Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Filter setzen [erledigt"

Beitrag von AUGE_OHR »

ich hoffe du hast

Code: Alles auswählen

SET OPTIMZE OFF
denn sonst könnte SET FILTER "komische" Ergebnisse liefern ... :roll:
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Filter setzen [erledigt"

Beitrag von Wolfgang_B »

nö, hab ich nicht :? Werde ich aber jetzt machen :)
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filter setzen [erledigt"

Beitrag von brandelh »

Dass man den Inhalt eines Feldes gegen den Inhalt einer Variablen oder eines Feldes einer anderen DBF vergleicht ist üblich und funktioniert wir oben beschrieben.
Dass beide Felder in der gleichen DBF stehen, ohne dass man den Suchbegriff in eine Variable oder einen String (wie von Tom beschrieben) umsetzt, ändert Suchbegriff und Vergleichswert dynamisch.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Filter setzen [erledigt"

Beitrag von Tom »

Die meisten PDR, die SET OPTIMIZE und z.B. auch SET SMARTFILTER betreffen, sind längst geschlossen. Es gibt nur noch sehr spezielle Situationen, in denen diese Schalter Probleme bereiten können.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Filter setzen [erledigt"

Beitrag von AUGE_OHR »

Tom hat geschrieben: Mo, 12. Mär 2018 9:10 Die meisten PDR, die SET OPTIMIZE und z.B. auch SET SMARTFILTER betreffen, sind längst geschlossen. Es gibt nur noch sehr spezielle Situationen, in denen diese Schalter Probleme bereiten können.
also ich zähle mehr Rot als Grün
Set_Optimize.jpg
Set_Optimize.jpg (218.99 KiB) 4712 mal betrachtet
p.s. auch 5227 ist OPEN ... komisch das er Grün anzeigt [-X
gruss by OHR
Jimmy
Antworten