Immer wieder tauchen in Foren und Newsgroups Fragen auf, wie man auf die in den Formularen und deren Steuerelementen enthaltenen Daten zugreifen kann. Dieser Beitrag soll die für den Zugriff notwendigen Techniken vorstellen und behandelt dabei nicht nur einfache Steuerelemente, sondern auch Kombinationsfelder, Listenfelder oder in Unterformularen enthaltene Daten.
Zugriff auf die Datenherkunft des Formulars
Voraussetzung für diesen und die folgenden Abschnitte ist, dass das Formular, dessen Daten Sie abfragen möchten, an eine Datenherkunft gebunden ist. Dabei spielt es keine Rolle, ob es sich dabei um eine Tabelle oder eine Abfrage handelt. Soweit keine anderen Angaben folgen, beziehen sich die Beispiele auf ein Formular mit der Tabelle tblArtikel der Beispieldatenbank als Datenherkunft.
Am einfachsten ist der direkte Zugriff auf die Werte der in der Datenherkunft eines Formulars angegebenen Felder: Er kann sogar erfolgen, wenn gar kein Textfeld oder ein anderes an ein Feld der Datenherkunft gebundenes Steuerelement im Formular enthalten ist. Wenn Sie also ein nacktes Formular mit einer Tabelle als Datenherkunft ausstatten, können Sie wie folgt auf die Feldinhalte des aktuellen Datensatzes zugreifen – zum Beispiel auf das Feld Artikelname (das Formular heißt frmBeispiel, der aktuelle Datensatz ist der erste entsprechend der Sortierung der Datenherkunft beziehungsweise einer nachträglich festgelegten Sortierung):
Forms!frmBeispiel!Artikelname
Es funktioniert aber auch die Version mit dem Punkt, auch wenn dies keine empfohlene Variante ist:
Forms!frmArtikel.Artikelname
Wenn Sie nun ein Feld der Datenherkunft, zum Beispiel das oben verwendete Feld Artikelname, in den Entwurf des Formulars ziehen und in die Formularansicht wechseln, funktioniert dies weiterhin.
Die Frage ist nur: Worauf bezieht sich das nun – auf das Textfeld-Steuerelement, das ja beim Einfügen automatisch den Namen Artikelname erhält, oder auf das Feld Artikelname der Datenherkunft Die Antwort lässt sich leicht herleiten: Stellen Sie einfach die Eigenschaft Steuerelementinhalt des Textfeldes auf einen Wert wie ="Test" ein. Die obigen Ausdrücke liefern dann den Wert Test zurück und beziehen sich damit auf das Textfeld namens Artikelname und nicht auf das gleichnamige Feld der Datenherkunft.
Den darin enthaltenen Wert erhalten Sie aber ganz sicher mit folgendem Ausdruck:
Forms!frmArtikel.Recordset!Artikelname
Textfelder
Wenn Sie Missverständnissen vorbeugen möchten, benennen Sie die Textfelder und sonstige Steuerelemente, die Sie per Drag and Drop aus der Feldliste in das Formular gezogen haben, entsprechend Ihrer Lieblingskonvention für die Benennung von Steuerelementen um. Um nur die gängigsten zu nennen, müsste das Textfeld Artikelname nun txtArtikelname und das Kombinationsfeld KategorieID jetzt cboKategorieID heißen – weitere Präfixe sind lst für Listenfelder, chk für Kontrollkästchen und so weiter.
Die oben erwähnte Form des Zugriffs auf den Wert eines Textfelds lautet dann:
Forms!frmArtikel!txtArtikelname
Innerhalb des Klassenmoduls des aktuellen Formulars kann der Bezug auf das Formular durch Me ersetzt werden:
Me!txtArtikelname
In den folgenden Abschnitten gehen wir davon aus, dass der Zugriff von außerhalb des Formulars erfolgt; wenn Sie vom Klassenmodul des Formulars aus zugreifen möchten, können Sie Forms!<Formularname> durch Me ersetzen.
Der Bezug auf txtArtikelname liefert aber auch nur den Wert des Textfelds zurück, weil Value die Standardeigenschaft von Textfeld-Objekten ist. Korrekterweise sollte man dies ausschreiben:
Forms!frmArtikel!txtArtikelname.Value
Der Wert eines gebundenen Textfelds stimmt aber längst nicht immer mit dem überein, was darin steht. Ôndern Sie einmal den Text, ohne das Textfeld zu verlassen, und lassen Sie sich den Wert mit der Value-Eigenschaft ausgeben: Richtig, dies gibt nicht den angezeigten Wert, sondern immer noch den ursprünglichen Wert aus. Auf den angezeigten Text greifen Sie mit der Text-Eigenschaft zu:
Forms!frmArtikel!txtArtikelname.Text
Die Text-Eigenschaft funktioniert allerdings nur, wenn das gewünschte Steuerelement den Fokus besitzt. Sobald der Fokus auf ein anderes Steuerelement fällt, übernimmt Access den angezeigten Ausdruck übrigens auch als Wert des Steuerelements, jedoch ohne den Datensatz selbst bereits zu speichern.
Kombinationsfelder
Viele Fragen tauchen in Zusammenhang mit Kombinationsfeldern auf. Das Folgende geht davon aus, dass es sich um ein Kombinationsfeld handelt, dessen gebundenes Steuerelement das erste Feld der Datensatzherkunft ist und das den Inhalt eines oder mehrerer weiterer Felder anzeigt. Die Datensatzherkunft eines einfachen Kombinationsfeldes zur Anzeige der Kategorie eines Artikels lautet dann so:
SELECT KategorieID, Kategoriename FROM tblKategorien ORDER BY Kategoriename;
Im aufgeklappten Zustand sieht ein solches Kombinationsfeld wie in Bild 1 aus. Im vorliegenden Fall sind zwei Informationen interessant:
Bild 1: Ein aufgeklapptes Kombinationsfeld zur Anzeige der Kategorien eines Artikels
- der Wert des Kombinationsfeldes, also der Wert des als gebundene Spalte verwendeten Felds der Datensatzherkunft und
- der angezeigte Ausdruck.
Den Wert erhalten Sie mit diesem Ausdruck:
Forms!frmArtikel!cboKategorieID
Dies ist wiederum die vereinfachte Variante des folgenden Ausdrucks:
Forms!frmArtikel!cboKategorieID.Value
Den angezeigten Wert für dieses Kombinationsfeld erhalten Sie wie bei einem Textfeld über die Eigenschaft Text und zusätzlich über die Angabe der gewünschten Spalte der Datensatzherkunft. Diese wird durch die Eigenschaft Column gefolgt durch die in Klammern stehende Nummer der Spalte der Datenherkunft repräsentiert, wobei 0 der ersten Spalte entspricht. Hier wäre also folgender Ausdruck richtig:
Forms!frmArtikel!cboKategorieID.Column(1)
Daraus lässt sich leicht ableiten, dass Sie über die nullte Spalte den Wert der gebundenen Spalte ermitteln können:
Forms!frmArtikel!cboKategorieID.Column(0)