Mit dem Befehl getRow
kannst Du vom Prinzip her die Datensatzzahl auslesen, die im Formular unten eingeblendet wird. Von dem Befehl hast Du dann nichts, wenn Du z.B. vorher einen Formularfilter genutzt hast, den jetzt ausschaltest und mit der ermittelten Zeile den Datensatz suchst. Da landest Du an ganz anderen Stellen, weil ja die Zahl der Datensätze gewechselt hat. Selbst eine Sortierung der Datensätze bringt Dich da schon durcheinander.
Da aus dem Ausschnitt nicht klar wird, wie der Filter definiert ist, kann ich hier nur allgemein schreiben: Du musst eine Abfrage starten, die die identische Anzahl an Datensätzen hat wie das Formular. Du willst zu einem bestimmten Datensatz gelangen, dessen Feld “Nr.” eindeutig ist. Jetzt gehst Du durch oResult (ein Objekt, keine Zahl) durch - und zwar so lange, bis Du “Nr.” (stFeld) aus dem Ergebnis ausliest. Bei jeder Schleife zählst Du auf den Zähler iResult einen drauf. Sobald die Gleichheit da ist brichst Du die Schleife ab und kannst mit oForm.absolute(iResult)
das Formular auf diesen Datensatz einstellen.
Ich habe so etwas ähnliches gerade einmal für eine Kalenderübersicht zusammengebaut:
stSql = oForm.SingleSelectQueryComposer.Query
oResult = oSQL_Statement.executeQuery(stSql)
Do
oResult.next
iRow = iRow +1
IF oResult.isLast THEN Exit Do
LOOP UNTIL stDatum = oResult.getString(2)
oForm.last
oForm.absolute(iRow)
Da suche ich irgendwo ein Datum aus, klicke darauf und der Kalender, der ein ganzes Jahr anzeigt, zeigt so das Datum im Tabellenkontrollfeld ganz oben an. Ganz oben nur deswegen, weil ich zuerst zum Ende des Formulars gehe.
Ich habe den Code noch etwas angepasst. Der obige Code nimmt in der verbesserten Variante genau die Abfrage auf, die im Formular gilt - incl. Filter und Sortierung. Und wenn das Datum in meinem Code durch die Filterung nicht mehr dabei ist, dann steigt das Makro eben aus der Schleife aus und der letzte Datensatz wird angezeigt.