[Gelöst] Per Macro schnell auf Datensatz im Formular

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

[Gelöst] Per Macro schnell auf Datensatz im Formular

Beitrag von agrupe »

Hallo,

ich habe folgendes Problem:

Mein Adress-Formular erkennt anhand der Emailadresse, die in einem SQL Statement ausgewertet wird, dass es den gerade einzugebenden Kunden schon gibt und liefert mir die Kundennr. Prima ;-)

Nun möchte ich gern im Formular auf den dazugehörigen Kundendatensatz springen.

Die einzige Lösung, die ich realisieren konnte ist die, dass per Macro auf den letzten Kunden positioniert wird. Dann die aktuelle Kundennr ausgelesen wird und solange rückwärts gesucht wird, bis der betreffende Datensatz gefunden wird.
Das sieht exakt so aus, wie die Suche, die OO unter der Lupe anbietet und dauert auch so lange, da jeder Datensatz neu am Bildschirm angezeigt wird. Bei 3000 Datensätzen ist das ermüdend zumal ein SQl Statement nur den Bruchteil einer Sekunde zur Suche braucht.

Wer hat eine Idee, wie man das ganze beschleunigen kann?

Danke & Gruß

Andreas
OO 3.2 unter OpenSuse 11
agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

Re: [Gelöst] Per Macro schnell auf Datensatz im Formular

Beitrag von agrupe »

Hallo,

schon witzig, wenn man das Gehrin einschaltet ...

Also, es gibt m.E. keine OO Funktion, die das leistet. Aber es gibt die Methode "absolute()" um auf eine bestimmte Zeile im Resultset zu springen. Leider gibt SQL die absolute Datensatznummer nicht an, unter der das Suchergebnis lag.

Lösung per Such/Sortieralgorithmus:

1) Auf den letzten Datensatz positionieren "last()"
2) mit "rowcount" die Zeilennummer des letzten Satzes im Resultset lesen und merken
3) in einer Schleife wie beim sequentiellen Zählen diese mit der gesuchten Nr vergleichen
3 a) Wenn die aktuelle Nr > der gesuchten einfach die aktuelle Zeilennr/2 und mit "absolute()" positionieren
3 b) Wenn die aktuelle Nr < der gesuchten ist, ist man "vorbeigesprungen" dann einfach die aktuelle Zeilennr + 50% und mit "absolute()" positionieren
Und das ganze so lange, bis der Zielwert gefunden wurde.

So komme ich bei 3000 Datensätzen bei der sequentiellen Methode auf 3000 Vergleiche und Aufrufe, was extrem lahm ist.
Bei der oben beschrieben Suche suche benötige ich ungefähr 10 - 20 Vergleiche. Bingo.

Gruß

Andreas

P.S. die Zahlen mit 50% und /2 sind beispielhaft; der Code ist recht komplex geworden.
OO 3.2 unter OpenSuse 11
Antworten