Datensatzzeiger bei SQL-Statement positionieren [ERLEDIGT]

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Datensatzzeiger bei SQL-Statement positionieren [ERLEDIGT]

Beitrag von UliTs »

Ich habe folgendes Problem:
Ich bilde mir ein SQL-Statement mit JOINs, welches auch vom ADS extrem schnell ausgeführt werden kann.
Das Statement verknüpfe ich mit einem Browser. Mit Hilfe des Browsers kann der Anwender den Datensatzzeiger entsprechend positionieren.
Der Anwender kann dann auch Filterbedingungen setzen, so dass ich ein neues SQL-Statement bilde, welches das bisherige ersetzt.
Anschließend möchte ich automatisch den Datensatzzeiger wieder auf den vorherigen Datensatz positionieren (sofern dieser weiterhin zur Ergebnismenge des SQL-Statements gehört). Leider gelingt es mir nicht immer, dass die Positionierung innerhalb weniger 10tel-Sekunden erfolgt.
Wie macht man dies am besten?

- Vorher die Record-Nummer merken und anschließend wieder darauf Positionieren geht bei SQL-Statements nicht
Also merke ich mir eine eindeutige Id.
- der AdsLocate-Befehl wird beim ADS leider lokal ausgeführt, so dass es damit viel zu lang dauert
Also setze ich temporär einen Filter auf die Id, positionierte den Cursor mittels :GoTop() und lösche den Filter wieder.
Das funktioniert auch oft schnell. Aber manchmal eben leider nicht :( . Und das, obwohl es eigentlich einen Index über die Id gibt.

Gibt es vielleicht eine andere Lösungsmöglichkeit hierfür?

Uli
Zuletzt geändert von UliTs am Mo, 12. Mai 2014 13:28, insgesamt 1-mal geändert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Datensatzzeiger bei SQL-Statement positionieren

Beitrag von nightcrawler »

Wenn es einen Index gibt, ist AdsSek das Schnellste. Von der Beschreibung her vermute ich aber eher, dass das Ergebnis einen statischen Cursor erzeugt. Dabei wird die Ergebnismenge nicht vollständig abgebildet, sondern erst, wenn die Records auch benötigt werden - zB durch ein Skip.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Datensatzzeiger bei SQL-Statement positionieren [ERLEDIG

Beitrag von UliTs »

nightcrawler hat geschrieben:Wenn es einen Index gibt, ist AdsSek das Schnellste. Von der Beschreibung her vermute ich aber eher, dass das Ergebnis einen statischen Cursor erzeugt. Dabei wird die Ergebnismenge nicht vollständig abgebildet, sondern erst, wenn die Records auch benötigt werden - zB durch ein Skip.
Hallo Joachim,

danke für die schnelle Antwort. Ja, es ist in diesen Fällen ein statischer Cursor. Ich habe die Erfahrung gemacht, dass es bis ca. 20.000 Datensätze ausreichend schnell ist, danach wird es zu langsam...
Ich vermute, dass bei der Auswertung des Filters bei einem statischen Cursor dann alle Records vor Anwendung des Filters bestimmt werden.
Da gibt es keine andere Lösung, oder?

Ich helfe mir jetzt mit einem dynamischen Cursor. Ist auch nicht viel mehr Aufwand.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten