Filter ausschalten und trotzdem auf dem aktuellen Datensatz bleiben

Hallo, ich springe von einem Formular zu einem anderen Formular (“frmMineralien”) so, dass ich über eine Abfrage gezielt bei einem Datensatz lande. Ich möchte nun den Filter zurücksetzen, OHNE dass mir das Formular auf den ersten Datensatz zurückspringt. Mein Versuch, mit getRow die Zeile auszulesen scheitert kläglich, da ich nur die - 1-zeilige - Abfrage auslese und somit immer nur die Nummer “1” bekomme. Mein Versuch, auf die zugrundeliegende Tabelle zuzugreifen:

scheitert daran, dass es ja kein entsprechendes “boundField” für die Zeilennummer gibt und anscheinend der GetRow Befehl in der Tabelle nicht funktioniert oder die Syntax nicht stimmt. Ideen?


In dem Filter wird eine Abfrage gemacht, wonach der - eindeutige - Name gleich dem Feld der vorherigen Form sein soll. Definitionsgemäß enthält die Abfrage maximal einen Eintrag. Mein Versuch, deine Anregung aufzunehmen, führt nicht dazu, dass die Variable iResult hoch zählt:

Wo ist der Fehler? (In der der Abfrage zugrunde liegenden Tabelle ist in Spalte (1) die “Nr.” abgelegt).

Schau Dir einmal an, wie ich das unten realisiert habe. Dein Verfahren macht aus dem Ganzen nur eine ‘1’, weil die Bedingung ja genau einmal erfüllt ist.

WHILE - WEND - Schleifen haben, wenn ich das richtig verstanden habe, keine Abbruchmöglichkeit. Und die brauchst Du. Ansonsten kannst Du alternativ nur die Gesamtzahl der Datensätze zählen. Deswegen unten DO - LOOP UNTIL

Danke, mit der Do-LOOP UNTIL Schleife klappt das.

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.