Vorhergehenden Feldinhalt ermitteln

Datenbank

Für viele Anwendungen ist es notwendig, Informationen aus anderen Datensätzen in ein Formular zu übernehmen. Zum Beispiel: Beim Erfassen von Zählerständen in einer Tabelle, möchten Sie gerne auf den vorhergehenden Datensatz zugreifen, den letzten Zählerstand auslesen und dann vom aktuellen Zählerstand subtrahieren. Access bietet verschiedene Möglichkeiten, um dieses Problem zu lösen. Unter anderem könnten Sie eine VBA-Prozedur schreiben, aber wesentlich einfacher und schneller ist der Einsatz der so genannten Aggregatfunktionen von Access. Mit ihrer Hilfe können Sie Daten aus beliebigen Tabellen oder Abfragen auslesen und datensatzunabhängig in einem Formular anzeigen.

An einem konkreten Beispiel lässt sich der Einsatz der Aggregatsfunktionen am einfachsten erklären: Nehmen wir an, dass Sie in einer Tabelle „tblZähler“ jeden Tag irgendeinen aktuellen Zählerstand (beispielsweise vom Kopierer) erfassen möchten. Die Tabelle weist also die Felder „Datum“ und „Zählerstand“ auf. Die wichtigste Voraussetzung zum Auslesen des Zählerstandes vom vorhergehenden Tag ist es, dass die Tabelle zusätzlich über einen Primärschlüssel verfügt, der die Datensätze aufsteigend durchnumeriert. In unserem Fall hat das Feld den Namen „ID“.

Auf Basis dieser Tabelle erstellen Sie nun ein Formular „frmZähler“, das alle drei Felder enthält. Zur Anzeige des Zählerstandes vom vorhergehenden Tag fügen Sie ein ungebundenes Textfeld ein, dem Sie im Eigenschaftenfenster den Namen „“ZaehlerAlt“ geben. Interessant wird es nun bei der Datenherkunft dieses Feldes. Geben Sie hier folgendes ein:

=DomWert(„[Zählerstand]“;“tblZähl er“;“[ID]=“ & [Formulare]![frm- Zähler]![ID]-1)

Die Funktion DomWert hat die folgende Syntax:

=DomWert(„<Feld>“;“<Tabelle/Abfrage >“;“<Kriterien>“)

Geliefert wird das angegeben Feld aus der Tabelle oder Abfrage des Datensatzes, auf den die definierten Kriterien zutreffen.

In unserem Beispiel wählen die Kriterien den Datensatz aus, dessen ID-Nummer um den Wert 1 niedriger ist als die IDNummer des augenblicklich angezeigten Datensatzes.

Dabei handelt es sich um den Datensatz des vorangegangenen Tages und hier findet sich dann auch der gesuchte alte Zählerstand.

Die Differenz zwischen altem und neuem Zählerstand ermitteln Sie dann wiederum in einem ungebundenen Textfeld, dessen Datenherkunft folgendermaßen festgelegt ist:

=[Zählerstand]-[ZaehlerAlt]

Diese Lösung hilft natürlich nur in einigen speziellen Situationen weiter, aber sie zeigt sehr gut, wie sich die Aggregatsfunktionen von Access nutzbringend in Formularen einsetzen lassen. Im nächsten Schritt können wir uns nun mit einem etwas komplizierteren Thema befassen, das ebenfalls mehrere Male als Lösungswunsch von unseren Lesern geäußert wurde: Beim Erfassen von Bestellungen wird im Formular der Name des Kunden per Kombinationsfeld ausgewählt.

Wünschenswert wäre es nun, direkt beim Annehmen der neuen Bestellung einige zusätzliche Informationen über den Kunden angezeigt zu bekommen.

Beispielsweise wäre es nützlich, das Datum der letzten Bestellung zu erfahren. Anhand des Formulars „Bestellungen“ in der Datenbank NORDWIND.MDB, können Sie die Technik im folgenden Schritt für Schritt nachvollziehen:

  1. Öffnen Sie die Datenbank NORDWIND. MDB wechseln Sie auf das Register „Formulare“ und klicken Sie das Formular „Bestellungen“ mit der rechten Maustaste an.
  2. Rufen Sie das Kontextmenü KOPIEREN auf, klicken Sie mit der rechten Maustaste in das Datenbank-Fenster und wählen Sie EINFÜGEN an.
  3. Geben Sie dem neuen Formular den Namen „Bestellungen_DLookup“ und bestätigen Sie mit OK.
  4. Fügen Sie ein ungebundenes Textfeld ein, und rufen Sie das Eigenschaftenfenster auf.
  5. Geben Sie als Datenherkunft die folgende Funktion ein:
    =DomMax(„[Bestelldatum]“;“Bestellungen“;“[ Kunden-Code]='“ & [Formulare]![Bestellungen_DLook up]![Kunden-Code] & „‚ And [Bestelldatum] < #“ & Format$( Jetzt();“mm/tt/jj“) & „#“)

  6. Wenn Sie nun wieder in die Formularansicht wechseln, wird in dem ungebundenen Textfeld für jeden Kunden das Datum der letzten Bestellung angezeigt.

Und so arbeitet die Funktion: Über die Kriterien werden alle Bestellungen des Kunden ausgewählt, der zur Zeit im Formular zu sehen ist. Aus diesen Datensätzen liefert DomMax dann den größten Wert des Datumsfeldes, was dem Datum der letzten Bestellung entspricht. Wichtig dabei ist noch, dass die Kriterien explizit die Bestellung des aktuellen Tages ausschließen. Andernfalls würde Access beim Erfassen einer neuen Bestellung natürlich dieses Datum anzeigen.