Richtig peinlich: Filter auf DatenSatz

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
GrillenHirni
UDF-Programmierer
UDF-Programmierer
Beiträge: 98
Registriert: Do, 18. Jul 2013 11:56
Kontaktdaten:

Richtig peinlich: Filter auf DatenSatz

Beitrag von GrillenHirni » So, 30. Sep 2018 12:04

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

GrillenHirni
UDF-Programmierer
UDF-Programmierer
Beiträge: 98
Registriert: Do, 18. Jul 2013 11:56
Kontaktdaten:

Re: Richtig peinlich: Filter auf DatenSatz

Beitrag von GrillenHirni » So, 30. Sep 2018 12:33

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

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7315
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Richtig peinlich: Filter auf DatenSatz

Beitrag von Tom » So, 30. Sep 2018 13:58

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.
Herzlich,
Tom

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11464
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Richtig peinlich: Filter auf DatenSatz

Beitrag von AUGE_OHR » So, 30. Sep 2018 14:51

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 :?:
gruss by OHR
Jimmy

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7315
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Richtig peinlich: Filter auf DatenSatz

Beitrag von Tom » So, 30. Sep 2018 15:57

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
Herzlich,
Tom

GrillenHirni
UDF-Programmierer
UDF-Programmierer
Beiträge: 98
Registriert: Do, 18. Jul 2013 11:56
Kontaktdaten:

Re: Richtig peinlich: Filter auf DatenSatz

Beitrag von GrillenHirni » Mo, 01. Okt 2018 10:29

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

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7315
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Richtig peinlich: Filter auf DatenSatz

Beitrag von Tom » Mo, 01. Okt 2018 10:47

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.
Herzlich,
Tom

Antworten