[Gelöst] - SETFILTER vs. MARK

30. August 2006 13:01

jaja, ... ich komme heute mal wieder gar nicht klar ... :cry:

Folgende Sache, ich habe bisher ein Form gehabt wo ich bestimmte Datensaetze gefiltert habe, mittels MARK. Sieht so aus:


Code:
MyFunction(Var1:Boolean,Var2:Boolean) {
myRec.RESET;
IF myRec.FIND('-') THEN
  REPEAT
     IF Var1 = TRUE THEN BEGIN
       IF (myRec.Var1 = TRUE) AND
           ((myRec."FieldX" = TRUE) OR
            (myRec."FieldZ" = TRUE))
       THEN
         myRec.MARK(TRUE);
     END;
     IF Var2 = TRUE THEN BEGIN
       IF (myRec.Var2 = TRUE) AND
           ((myRec."FieldX" = TRUE) OR
            (myRec."FieldZ" = TRUE))
       THEN
         myRec.MARK(TRUE);
     END;
  UNTIL myRec.NEXT = 0;
myRec.MARKEDONLY(TRUE);
FORM.RUN(50000,myRec);
}


Nun frage ich mich ob das gleiche auch über ein SETFILTER gelöst werden kann. Nur wie ? Folgender Ansatz ist ja vollkommen falsch:

Code:
myRec.SETFILTER(Field1, FORMAT(Var1)); // Ja/Nein
myRec.SETFILTER(Field2, FORMAT(Var2)); // Ja/Nein
myRec.SETFILTER(FieldX, '%1|%2', TRUE, FALSE);
myRec.SETFILTER(FieldZ, '%1|%2', TRUE, FALSE);


IF myRec.FIND('-') THEN BEGIN
   myForm.SETTABLEVIEW(myRec);
   myForm.RUN();
END;



Any Tipps :?: :idea: Danke :!:
Zuletzt geändert von elTorito am 30. August 2006 14:30, insgesamt 1-mal geändert.

30. August 2006 13:13

Leider kann deine Schleife nicht durch einfache SETFILTER ersetzt werden, da du dort eine OR-Verknüpfung in der Bedingung hast.

30. August 2006 13:18

Timo Lässer hat geschrieben:Leider kann deine Schleife nicht durch einfache SETFILTER ersetzt werden, da du dort eine OR-Verknüpfung in der Bedingung hast.


Also muss ich das erstere, was ich auch schon verwende, weiter anwenden?

30. August 2006 13:29

@elTorito
Was stört Dich an dieser Variante?

30. August 2006 13:33

Ja, du kommst um die erste Version nicht herum.

Ich habe die Funktion mal ein wenig optimiert:
Code:
MyFunction(Var1:Boolean,Var2:Boolean)
myRec.RESET;
IF myRec.FIND('-') THEN
  REPEAT
    myRec.MARK :=
      ((Var1 AND myRec.Var1) OR
       (Var2 AND myRec.Var2)) AND
      (myRec."FieldX" OR myRec."FieldZ");
  UNTIL myRec.NEXT = 0;
myRec.MARKEDONLY(TRUE);
FORM.RUN(50000,myRec);

30. August 2006 13:47

Gefällt Dir die Lösung aus Performance-Gründen (Mark) nicht?

30. August 2006 14:05

Hi,

ich dachte es sei eine Notlösung (flickerei) gewesen, da mir zu seiner Zeit nichts anderes einfiel als MARK zu benutzen, um den Filter zu setzen.

Wenns aber üblich ist, dann kann ich sehr gut damit leben.

Danke für die Optimierung. Nun sieht es auch schon gar nicht mehr so zusammengeschustert aus :-)