[gelöst] Getrangemax mit Setrange

7. September 2011 20:55

Hallo,

ich benötige gerade aus einem Feld eines Recordsets den höchsten Wert. Ich laufe mit einem Report durch die Tabelle und setze drei einfache Setranges auf die "Suchtabelle". Ich übernehme nur den Wert aus dem Dataitem. Dann prüfe ich mit Record.Getrangemax("Field") den größten Wert.

Leider meckert NAV, dass es sich hier um keinen Filter handelt.. ja ich hab aber nur eine Spanne! Auch ein überlisten mit Setfilter und '%1..%1' mag er nicht!

Der Wert des Feldes in der Quelltabelle wird validiert mit dem höchsten Wert der Zieltabelle. 3 Felder als "Filterung", viertes Feld fürs prüfen. Hat jemand eine Idee, wie ich das umbiegen kann? Eine manuelle Prüfung ist nicht möglich, da es sich um weit über 100.000 Datensätze handelt, würde ewig dauern.
Zuletzt geändert von BlackJack am 8. September 2011 08:35, insgesamt 1-mal geändert.

Re: Getrangemax mit Setrange

7. September 2011 22:38

Kann es sein, dass du etwas vewechselst?
GETRANGEMAX ist nicht dafür da, um aus mehreren Datensätzen in einem Feld den höchsten Wert zu bestimmen, sondern um Anfang (GETRANGEMIN) oder Ende (GETRANGEMAX) des Filterbereichs zu bestimmen.
Beispiel:
An irgendeiner früheren Codestelle wurde auf einen Record abgesetzt:
Code:
DeinRec.SETRANGE(DeinIntegerFeld, 5, 10);

Dann gilt:
DeinRec.GETRANGEMIN(DeinIntegerFeld) entspricht 5
DeinRec.GETRANGEMAX(DeinIntegerFeld) entspricht 10.

Dies funktioniert nur, wenn wirklich auf einen Von-Bis-Bereich gefiltert worden ist.
Nicht zulässig wäre z.B.
Code:
DeinRec.SETRANGE(DeinIntegerFeld, 5);


Der C/SIDE Reference Guide macht das eigentlich sehr schön klar.

Nun kann es sein, dass dein Filter als Ergebnis Datensätze mit den Inhalten 5, 7 und 8 ausgegeben hätte. Das ändert aber nichts daran, dass GETRANGEMAX immernoch 10 ist.

Re: Getrangemax mit Setrange

8. September 2011 08:23

BlackJack hat geschrieben:Hallo,

ich benötige gerade aus einem Feld eines Recordsets den höchsten Wert. Ich laufe mit einem Report durch die Tabelle und setze drei einfache Setranges auf die "Suchtabelle". Ich übernehme nur den Wert aus dem Dataitem. Dann prüfe ich mit Record.Getrangemax("Field") den größten Wert.

Leider meckert NAV, dass es sich hier um keinen Filter handelt.. ja ich hab aber nur eine Spanne! Auch ein überlisten mit Setfilter und '%1..%1' mag er nicht!

Der Wert des Feldes in der Quelltabelle wird validiert mit dem höchsten Wert der Zieltabelle. 3 Felder als "Filterung", viertes Feld fürs prüfen. Hat jemand eine Idee, wie ich das umbiegen kann? Eine manuelle Prüfung ist nicht möglich, da es sich um weit über 100.000 Datensätze handelt, würde ewig dauern.


Wenn Du den höchsten Wert in dem Recordset suchst und es keinen Schlüssel dafür gibt, dann den Recordset durchlaufen und den Maximalwert durch einen einfachen Vergleich bestimmen:

Code:
IF CurrentValue>MaxValue THEN MaxValue:=CurrentValue;


Oder habe ich hier was falsch verstanden?

mfg,
winfy

Re: Getrangemax mit Setrange

8. September 2011 08:35

Okay, ihr habt recht. Dachte, dass man die Funktion dennoch irgendwie dafür gebrauchen könnte. Ich werde die Ermittlung nun selbst vornehmen.