[gelöst]Setfilter, Setrange

18. Februar 2009 11:43

Hallo,

eine kleine kurze Frage.

Macht es einen unterschied, ob ich auf einen Datensatz erst das setrange() setze und dann den setfilter()?

Vielen Dank!
Zuletzt geändert von rom am 18. Februar 2009 16:20, insgesamt 1-mal geändert.

Re: Setfilter, Setrange

18. Februar 2009 11:47

soweit ich weiss setzt beides einfach nur den Filter. Nur das SetRange es halt einfacher machen soll, eine gewisse Spanne (von..bis) abzubilden/zu filtern.

also, nein macht keinen Unterschied.

Re: Setfilter, Setrange

18. Februar 2009 11:48

rom hat geschrieben:Macht es einen unterschied, ob ich auf einen Datensatz erst das setrange() setze und dann den setfilter()?

Auf das gleiche Feld?
In diesem Fall müsste der SETFILTER den SETRANGE überschreiben.

Gruß
Ralf

Re: Setfilter, Setrange

18. Februar 2009 11:50

danke, aber..
einen kleinen Unterschied muss es ja machen, weil ich bei mir in einem Quellcode eine Stelle gefunden habe, wo zuerst auf ResourcenNo mit setrange gefiltert wird und dann mit setfilter auf das Datum.

Soviel ich weiß, setzt wohl der setfilter den angegeben Schlüssel zum Primärschlüssel!??!?

Re: Setfilter, Setrange

18. Februar 2009 11:57

ralfescher hat geschrieben:Auf das gleiche Feld?


Nein, auf unterschiedliche Felder, zuerst auf Resouce und dann auf Datum.

Re: Setfilter, Setrange

18. Februar 2009 12:08

Wie Matthias oben schrieb, ist der SETRANGE (soweit ich es weiß) nur eine einfache Variante des SETFILTER.

Natürlich macht es einen Unterschied, in welcher Reihenfolge man welche Felder filtert (unabhängig von SETRANGE und SETFILTER).
Man sollte passend zu einem günstigen Schlüssel (mit SETCURRENTKEY setzen) mit dem ersten Filter soviele Datensätze wie möglich filtern.
Die weiteren Filter sollten dann die Suche verfeinern.

Vielleicht kannst Du ein Codebeispiel anführen, zum besseren Verständnis Deines Problems.

Gruß
Ralf

Re: Setfilter, Setrange

18. Februar 2009 12:13

Ok,

hier das Codebeispiel:
Code:
EmployeeAbsence.RESET;
EmployeeAbsence.SETRANGE("Employee No.","Resource No.");
EmployeeAbsence.SETFILTER("From Date",'>=%1',"Posting Date");
EmployeeAbsence.SETFILTER("To Date",'<=%1',"Posting Date");


So wird auf alle Fälle falsch gefiltert. Wenn ich die Setfilter entferne, passt es, bis auf die Tatsache, dass alle Daten dabei sind.

vg

Re: Setfilter, Setrange

18. Februar 2009 12:27

ralfescher hat geschrieben:Natürlich macht es einen Unterschied, in welcher Reihenfolge man welche Felder filtert (unabhängig von SETRANGE und SETFILTER).
Man sollte passend zu einem günstigen Schlüssel (mit SETCURRENTKEY setzen) mit dem ersten Filter soviele Datensätze wie möglich filtern.
Die weiteren Filter sollten dann die Suche verfeinern.

Für die Übersichtlichkeit und das Verstehen des Programmcodes ist es nützlich die SETRANGE/SETFILTER-Befehle in der entsprechenden Reihenfolge anzugeben.
Für das Funktionieren bzw. für die Performance ist es aber völlig unerheblich in welcher Reihenfolge die SETRANGE/SETFILTER-Befehle abgesetzt weden, da diese Befehler keinen direkten DB-Zugriff verursachen, sondern erst beim DB-Zugriff über z.B. FIND... die Filter zur Anwendung kommen.

Re: Setfilter, Setrange

18. Februar 2009 12:32

Versuchs doch mal mit:
Code:
EmployeeAbsence.RESET;
EmployeeAbsence.SETRANGE("Employee No.","Resource No.");
EmployeeAbsence.SETFILTER("From Date",'<=%1',"Posting Date");
EmployeeAbsence.SETFILTER("To Date",'>=%1',"Posting Date");

Re: Setfilter, Setrange

18. Februar 2009 12:46

rom hat geschrieben:Ok,

hier das Codebeispiel:
Code:
EmployeeAbsence.RESET;
EmployeeAbsence.SETRANGE("Employee No.","Resource No.");
EmployeeAbsence.SETFILTER("From Date",'>=%1',"Posting Date");
EmployeeAbsence.SETFILTER("To Date",'<=%1',"Posting Date");


So wird auf alle Fälle falsch gefiltert. Wenn ich die Setfilter entferne, passt es, bis auf die Tatsache, dass alle Daten dabei sind.


Mal davon ausgehend, dass "From Date" immer kleinergleich "To Date" ist, kann da auch nix raus kommen, außer, wenn beide gleich sind, oder denk ich nun falsch? Anfangsdatum>=Stichtag und Enddatum<=Stichtag. Das müsste doch eher andersrum.

Re: Setfilter, Setrange

18. Februar 2009 12:53

McClane hat geschrieben:Mal davon ausgehend, dass "From Date" immer kleinergleich "To Date" ist, kann da auch nix raus kommen, außer, wenn beide gleich sind, oder denk ich nun falsch? Anfangsdatum>=Stichtag und Enddatum<=Stichtag. Das müsste doch eher andersrum.

Genau das wollte ich mit meiner vorherigen Antwort zum Ausdruck bringen.

Re: Setfilter, Setrange

18. Februar 2009 12:57

jm hat geschrieben:Genau das wollte ich mit meiner vorherigen Antwort zum Ausdruck bringen.

Hoppla. Hab ich nicht gesehen :-?

Re: [gelöst]Setfilter, Setrange

18. Februar 2009 18:31

Nachtrag,
wenn ich mich recht errinere ist SETRANGE schneller (zumindest in der C/SIDE umgebung)
bin aber auch nicht sicher.
Ausserdem sollte die Reihenfolge der des gewählten Schlüssels entsprechen.