MS Access 2016/2019: Zugriff auf Datenfelder in Endlosformularen

Haselblatt

Cadet 1st Year
Registriert
Feb. 2022
Beiträge
12
Grüß euch alle,
meine Frage richtet sich an alle MS Access Profis. Denn obwohl ich das über 1000 Seiten starke Kompendium von Wolfram Langer besitze, finde ich im Buch keine Antwort auf folgende Frage:

Wie kann ich in einem Endlosformular ein Datenfeld im jenem Datensatz adressieren, der dem gerade bearbeiteten Datensatz vorhergeht?

Es geht darum, einen Ausdruck zu formulieren, der in Excel z.B. so lautet:
Wert_B14 = Wert_A14 + Wert_B13

Kann mir jemand helfen?
 
Haselblatt schrieb:
Grüß euch alle,
meine Frage richtet sich an alle MS Access Profis. Denn obwohl ich das über 1000 Seiten starke Kompendium von Wolfram Langer besitze, finde ich im Buch keine Antwort auf folgende Frage:

Wie kann ich in einem Endlosformular ein Datenfeld im jenem Datensatz adressieren, der dem gerade bearbeiteten Datensatz vorhergeht?

Es geht darum, einen Ausdruck zu formulieren, der in Excel z.B. so lautet:
Wert_B14 = Wert_A14 + Wert_B13

Kann mir jemand helfen?
Besteht die Möglichkeit ein Screenshot zu zeigen, wo du mit Pfeilen und Beschriftung das demonstrierst, was du erreichen möchtest? Der Mensch ist nun mal ein audiovisuelles Geschöpf :-D
 
ich versuche es, dauert aber ein wenig...
Ergänzung ()

bitte sehr, so sieht das aus (JPG-Anhang)
 

Anhänge

  • access_uf.jpg
    access_uf.jpg
    413,5 KB · Aufrufe: 195
Zuletzt bearbeitet:
Ist das Vorgehen immer identisch, also werden nur die Werte aus der aktuellen und NUR aus der vorherigen Zeile betrachtet, oder kann es auch sein, dass sich die Berechnung aus anderen älteren Werten zusammensetzen kann?
 
OK, dann wäre meine Idee folgende, die allerdings VBA voraussetzt und eine fortlaufende Nummerierung der Datensätze in dem von dir gezeigten Formular.

Das Feld "KM Beginn" sollte eine Ereignissteuerung bekommen. Dort soll nach Änderung des Inhalts, die ID des aktuell markierten Datensatzes ausgelesen werden. Dann fragst du nach der nächst kleinen ID und bekommst somit die vorherige Zeile. Mit der VBA-Funktion dlookup kannst du dann den Wert aus "KM Ende" der vorherigen Zeile auslesen und diesen vom "KM Beginn" der aktuell markierten Zeile abziehen.

Das was du bekommst, kannst du dann in das Feld "km privat" schreiben.
 
VBA ist mir vertraut, die fortlaufende Nummerierung der DS ist sicher gestellt, weil keiner der UF-Datensätze gelöscht werden kann. Kannst du mir noch die genaue Bedeutung der Parameter von dlookup() beschreiben? also etwa:
KmEnde_alt = DLookup([Par1], [Par2], ”[rollno]=DS_ID_vorherige")
Was ist Par1, Par2, rollno und welche Datentypen sind das?
Ergänzung ()

Sorry, muß jetzt weg, melde mich morgen wieder
 
Zuletzt bearbeitet:
Code:
//Die vorherige ID
Dim vorKMEnde As Double

vorKMEnde = Dlookup("[KM Ende]", "DEINE TABELLE", "ID=" & Cint(Me.ID) -1)
Me.KM_Privat = Me.KM_Beginn - vorKMEnde

So stelle ich mir das zumindest vor und hoffe, dass der Code so gehen müsste.
Natürlich müsste man sich noch überlegen, was passiert wenn es der aller erste Datensatz ist und man den vorherigen nicht abfragen kann. Also Stichwort Fehlerbehandlung.
 
Herzlichen Dank, G-Red, dieser Lösungsansatz trifft genau das, was ich gesucht habe und löst gleich ein paar weitere Schwachstellen in meinem Projekt. Die DLookup-Function ist genial! Ich verstehe nicht, wieso die im Buch von W.Langer auf mehr als 1000 Seiten nicht einmal erwähnt wird.
Nach Abschluss der Programmierung werde ich nochmals kurzen Bericht geben.
LG Haselblatt
 
Haselblatt schrieb:
Herzlichen Dank, G-Red, dieser Lösungsansatz trifft genau das, was ich gesucht habe und löst gleich ein paar weitere Schwachstellen in meinem Projekt. Die DLookup-Function ist genial!
Die ist zwar für kleinere Datenbestände ok, sobald du aber in größeren Datenmengen nach etwas damit suchst, wirds inperformant. Dann muss man auf Recordset und SQL umsteigen. Da du, meinem Gefühl nach, etwas für dich privat bastelst wird es Dlookup auch erstmal tun.
Haselblatt schrieb:
Ich verstehe nicht, wieso die im Buch von W.Langer auf mehr als 1000 Seiten nicht einmal erwähnt wird.
Ja, Bücher sind zwar für den Einstig gut, google und stackoverflow sind da aber meistens besser :). Zumal man dort auch häufig auf nahezu brauchbare Lösungen stößt.

Auch diese Seite kann ich wärmstens empfehlen :)
 
Funktioniert einwandfrei, alles bestens.
DLookup() ist sogar so clever, dass bei fehlerhaften Parametern (wie z.B. Referenz auf eine nicht existende ID beim ersten Datensatz) gar nichts passiert. Ich habe diesen Fall trotzden logisch abgefedert.
nochmals ein großes Dankeschön!
 
  • Gefällt mir
Reaktionen: G-Red
Zurück
Oben