Seite 1 von 1

Richtig peinlich: Filter auf DatenSatz

Verfasst: So, 30. Sep 2018 12:04
von GrillenHirni
Guten Tag

Diese Frage ist mir jetzt richtig peinlich - es sollen sie bitte nur die lesen, wo die
Antwort wissen....

Ich habe eine alte (25 Jahre...?) ProgrammZeile gefunden und gerade bemerkt,
dass das so nicht funktioniert:

nRecord:=20

SET FILTER TO (RECNO()=nRecord)

Nach DBGOTOP() habe ich ein EOF() und kann mir das einfach nicht erklären.

Die Datei, mit der ich da rumprobiere enthält 794 DatenSätze.

Kann jemand helfen?

Ich wünsche einen schönen Sonntag!
Grilli

Re: Richtig peinlich: Filter auf DatenSatz

Verfasst: So, 30. Sep 2018 12:33
von GrillenHirni
Ich hab ja geschrieben, es ist peinlich - jetzt habe ich gerade
herausgefunden, dass

SET FILTER TO (nRecord=RECNO()) funktioniert.

Verstehen tu ich es zwar nicht, aber ich denke noch darüber
nach...

Grilli

Re: Richtig peinlich: Filter auf DatenSatz

Verfasst: So, 30. Sep 2018 13:58
von Tom
Bei mir funktioniert beides. Hast Du einen Tippfehler irgendwo in der ersten Fassung?
Unabhängig hiervon: Besonder sinnvoll ist das nicht. DbGoto() kann das gleiche, ist aber um ein Vielfaches schneller.

Re: Richtig peinlich: Filter auf DatenSatz

Verfasst: So, 30. Sep 2018 14:51
von AUGE_OHR
GrillenHirni hat geschrieben: So, 30. Sep 2018 12:33 Verstehen tu ich es zwar nicht, aber ich denke noch darüber nach...
bringt

Code: Alles auswählen

SET OPTIMIZE OFF
in ersten Fall einen Treffer :?:

... aber wie Tom schon sagt/fragte: warum der Aufwand es auf 1 Record zu beschränken :?:

Re: Richtig peinlich: Filter auf DatenSatz

Verfasst: So, 30. Sep 2018 15:57
von Tom
Ich muss mich korrigieren. Ausprobiert mit 1.9 und 2.0. In beiden Fällen gibt es beim ersten Filter ein Eof() - er findet also nichts - und beim zweiten keines, er findet also was. Mit OPTIMIZE OFF arbeiten beide Versionen.

Code: Alles auswählen

FUNCTION Main()
LOCAL nRecord := 20
* SET OPTIMIZE OFF
USE test NEW
SET FILTER TO RecNo() = nRecord
DbGoTop()
? Eof()
SET FILTER TO nRecord = RecNo()
DbGoTop()
? Eof()
CLOSE
RETURN NIL

Re: Richtig peinlich: Filter auf DatenSatz

Verfasst: Mo, 01. Okt 2018 10:29
von GrillenHirni
Herzlichen Dank für die Tipps!

In der Anwendung ist es ein Listen-, Etiktetten- respektive DokumentenGenerator,
der eine Schlaufe über die Datei abarbeitet.

Es kann dabei irgendein FilterAusdruck, der mit einem FilterGenerator ermittelt
worden ist, gesetzt sein, oder auch keiner.

Wenn der Anwender nur einen einzelnen DatenSatz ausgeben möchte, war es
damals am einfachsten, mit dem FilterAusdruck den Zugriff auf den betreffenden
DatenSatz zu beschränken. Die DatensatzNummer wurde in diesem Fall vorher
durch BenutzerAbfrage ermittelt.

SET OPTIMIZE kenne ich nicht - das probiere ich noch aus...

Darum herzlicben Dank und einen guten Start in die neue Arbeitswoche...

Grilli

Re: Richtig peinlich: Filter auf DatenSatz

Verfasst: Mo, 01. Okt 2018 10:47
von Tom
Hallo, Grilli.

Solche Szenarien gibt es bei mir auch - beispielsweise eine vergleichsweise übersichtliche Auswahl (kleine Tabelle), und neben diversen Kategorien gibt es auch die Möglichkeit, einzeln auszuwählen. Da sowieso ein Filter gesetzt würde und die folgende Schleife entsprechend aufgebaut ist, ist der Filter auf Datensatznummer (oder ID oder ähnlich) auch legitim.

Bei "SET OPTIMIZE" musst Du nichts ausprobieren. Es ist nur leider standardmäßig an - und hier die Ursache für Deine Probleme. Wenn Du nur die Probleme beseitigen, aber sonst nichts am Programmverhalten ändern willst, verdrehst Du am besten die Ausdrücke im Filter.