Home > Artikel > Ausgabe 4/2013 > Textfelder: Value, OldValue und Text

Textfelder: Value, OldValue und Text

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Textfelder sind das Hauptwerkzeug zur Eingabe von Daten. Sie können diese an die Felder der Datenherkunft eines Formulars binden oder diese ungebunden einsetzen. So intuitiv Textfelder zu benutzen sind, soviele Möglichkeiten und Fallstricke bieten sie auch. Dieser Artikel zeigt, wie Sie zu verschiedenen Zeitpunkten auf den vorherigen Wert, den aktuellen Wert und den aktuell angezeigten Text eines gebundenen Steuerelements im Formular zugreifen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1304_TextfelderImGriff.mdb.

Gebundene Textfelder

Wenn Sie ein Formular an eine Tabelle oder Abfrage binden, können Sie Textfeldern ganz einfach den Inhalt eines der Felder der Datenherkunft als Inhalt zuweisen. Dazu brauchen Sie lediglich die Eigenschaft Steuerelementinhalt auf den Namen des entsprechenden Feldes einzustellen.

Wenn Sie der Eigenschaft Datenherkunft eines Formulars etwa die Tabelle tblArtikel zuweisen, können Sie ein Textfeld in den Detailbereich des Formularentwurfs ziehen und dann aus einer Liste eines der Felder der Datenherkunft auswählen (siehe Bild 1). Viel schneller geht dies natürlich, wenn Sie das entsprechende Feld direkt aus der Feldliste in den Entwurf des Formulars ziehen.

Zuweisen eines Feldes als Steuerelementinhalt

Bild 1: Zuweisen eines Feldes als Steuerelementinhalt

Was erreichen wir nun eigentlich durch die Bindung von Formular und Steuerelement an Tabelle/Abfrage und Feld? Zunächst einmal zeigt das Textfeld den Wert des Feldes für den aktuellen Datensatz der Datenherkunft des Formulars an. Die Bindung sorgt aber auch dafür, dass Änderungen am Inhalt zu einem bestimmten Zeitpunkt in die Tabelle übertragen werden. Zwischendurch geschehen jedoch noch eine Reihe anderer Dinge, die wir im Folgenden betrachten werden.

Speicherzeitpunkt

Interessant ist zum Beispiel die Frage, wann Access überhaupt die Änderung am Inhalt eines Textfeldes in der zugrunde liegenden Tabelle speichert. Dies lösen wir mithilfe der nebeneinander platzierten Objekte aus Bild 2 auf. Öffnen Sie das Formular frmArtikel und die Tabelle tblArtikel der Beispieldatenbank und ordnen Sie diese wie in der Abbildung an. Ändern Sie dann den Wert des Feldes Artikelname, tut sich nichts. Auch beim Verschieben des Fokus auf ein anderes Textfeld geschieht nichts. Erst wenn Sie den Datensatz speichern (beispielsweise durch einen Mausklick auf den Datensatzmarkierer mit dem Bearbeiten-Symbol oder durch die Auswahl eines anderen Datensatzes), wird die Änderung in die Tabelle übertragen.

Wann wird der geänderte Wert gespeichert?

Bild 2: Wann wird der geänderte Wert gespeichert?

Wo aber speichert Access die geänderten Daten des Textfeldes? Hier gibt es mehrere Eigenschaften, die Sie per VBA abfragen können:

  • Value: Enthält den aktuellen Wert des Textfeldes.
  • Text: Enthält den aktuell angezeigten Inhalt des Textfeldes.
  • OldValue: Enthält den vorherigen Wert des Textfeldes.

Diese Informationen helfen noch nicht weiter. Was ist zum Beispiel der Unterschied zwischen dem aktuellen Wert (Value) und dem aktuell angezeigten Wert (Text)? Angenommen, das Feld Artikelname enthält beim Anzeigen des aktuellen Datensatzes den Wert Chai, dann liefern sowohl Value als auch Text den Wert Chai.

Wenn der Benutzer den Inhalt nun ändert, indem er diesen etwa auf Chai (Tee) erweitert, dann enthält Text jeweils den angezeigten Inhalt.

Solange der Fokus in diesem Textfeld verbleibt und der Datensatz auch nicht beispielsweise mit der Tastenkombination Strg + S gespeichert wird, bleibt in der Eigenschaft Value jedoch der Text Chai erhalten.

OldValue enthält übrigens auch den ursprünglichen Wert.

Sobald der Benutzer jedoch den Fokus auf ein anderes Steuerelement verschiebt, ohne den Datensatz etwa durch einen Datensatzwechsel zu speichern, ändern sich die Werte der Eigenschaften: Chai (Tee) wird nun in die Eigenschaft Value eingetragen. Text enthält den gleichen Wert, und OldValue liefert den zuvor gültigen Wert Chai.

Achtung: Auch wenn Sie den Inhalt des Textfeldes mehrfach ändern, ohne den Datensatz zu speichern, enthält OldValue immer den zuletzt gespeicherten Wert, nicht den Wert vor der letzten Änderung.

Wenn Sie dies zu verschiedenen Zeitpunkten prüfen möchten, legen Sie im VBA-Editor ein neues Standardmodul etwa namens mdlBeispiele an und fügen Sie die folgende Prozedur hinzu:

Public Sub Textfeldeigenschaften()

     With Forms!frmArtikel!Artikelname

         Debug.Print "Value: " & .Value

         Debug.Print "Text: " & .Text

         Debug.Print "OldValue: " & .OldValue

     End With

End Sub

Diese gibt die jeweils aktuellen Werte aus. Aber Vorsicht: Wenn Sie zu einem anderen Steuerelement wechseln, löst die Prozedur einen Fehler aus – die Text-Eigenschaft können Sie nur abfragen, wenn das zu prüfende Steuerelement den Fokus besitzt.

Wenn Sie den Datensatz speichern (durch den Wechsel zu einem anderen Datensatz, mit Strg + S oder durch das Schließen des Formulars), werden alle drei Eigenschaften mit dem in der Tabelle befindlichen Wert aktualisiert.

Value als Standardeigenschaft

Die Value-Eigenschaft ist die Standardeigenschaft von Textfeldern und kann somit auch ohne Angabe der Eigenschaft abgefragt werden.

Die folgenden beiden Zeilen liefern, abgesetzt im Direktfenster des VBA-Editors, folglich die gleichen Werte:

Forms!frmArtikel!Artikelname.Value

    Chai (Tee)

Forms!frmArtikel!Artikelname

    Chai (Tee)

Value, OldValue und Text im zeitlichen Ablauf

Nun schauen wir uns noch anhand eines praktischen Beispiels an, wie die drei Eigenschaften sich in Abhängigkeit der verschiedenen Zustände von Steuerelement und Formular verhalten.

Dazu haben wir das Formular frmArtikel etwas erweitert. Das Textfeld Artikelname wurde in txtArtikelname umbenannt, außerdem haben wir die drei Textfelder txtOldValue, txtValue und txtText hinzugefügt (siehe Bild 3). Diese sollen, nach dem Eintreten bestimmter Ereignisse, den aktuellen Wert der drei Eigenschaften ausgeben.

Formular zum Prüfen der verschiedenen Zustände von Value, OldValue und Text

Bild 3: Formular zum Prüfen der verschiedenen Zustände von Value, OldValue und Text

Diese Ereignisse sind die folgenden:

  • Das Ereignis Beim Anzeigen des Formulars (Form_Current) wird direkt beim Anzeigen eines jeden Datensatzes ausgeführt.
  • Das Ereignis Bei Änderung des Textfeldes (txtArtikelname_Change) wird bei jeder Änderung des Inhalts ausgelöst.
  • Das Ereignis Nach Aktualisierung des Textfeldes (txtArtikelname_AfterUpdate) feuert etwa beim Verlassen des Textfeldes, aber wenn der Datensatz gespeichert wird und das Textfeld noch nicht aktualisiert wurde.
  • Das Ereignis Nach Aktualisierung des Formulars (Form_AfterUpdate) wird beim Speichern oder Wechseln des Datensatzes aufgerufen.

Wir fügen jeweils eine Ereignisprozedur für die genannten Ereignisse zum Formular hinzu. Alle vier sollen – in einem naiven ersten Ansatz – die drei Eigenschaften Value, OldValue und Text auslesen und in die drei Textfelder eintragen. Wenn alle die gleichen Anweisungen ausführen, können wir diese in eine einzige Prozedur ausgliedern und diese von den Ereignisprozeduren aus aufrufen. Die Ereignisprozeduren sehen nun so aus:

Private Sub Form_AfterUpdate()

     ArtikelnameAuslesen

End Sub

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!