Zugriff auf Daten in Formularen und Steuerelementen

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:

missing image file

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)

Dies gilt, wenn Sie das Kombinationsfeld wie allgemein üblich angelegt haben – also mit dem ersten Feld der Datensatzherkunft, das dem Primärschlüssel der zugrunde liegenden Tabelle entspricht, als gebundenem Feld (Eigenschaft Gebundene Spalte gleich 1) und dem zweiten Feld der Datensatzherkunft als angezeigtem Feld (Eigenschaften Spaltenanzahl und Spaltenbreite gleich 2 beziehungsweise 0cm).

Wenn die gebundene Spalte eine andere als die erste ist, liefert die Eigenschaft Value des Kombinationsfelds zwar den Wert der gebundenen Spalte, aber Column(0) nicht, denn die erste Spalte entspricht ja nicht dem gebundenen Feld. Andere Konstellationen als die hier verwendete sind aber eher selten.

Weitere Spalten von Kombinationsfeldern

Ã-fter kommt hingegen der Fall vor, dass man weitere Spalten der Datensatzherkunft zwar nicht anzeigen, aber trotzdem direkt nach der Auswahl eines Eintrags durch den Benutzer auswerten möchte.

Dies geschieht ganz einfach durch Variieren des Index der Column-Eigenschaft – Column(2) liefert beispielsweise den Wert der dritten Spalte der Datensatzherkunft. Dazu muss die Eigenschaft Spaltenanzahl nicht unbedingt größer als 2 sein – es reicht, wenn die Felder in der Datensatzherkunft enthalten sind. Das Gleiche gilt natürlich auch, wenn die Felder als weitere Spalten sichtbar sind.

Listenfelder

Listenfelder ähneln in vielen Beziehungen den Kombinationsfeldern. Sie erlauben allerdings, mehr als nur einen Datensatz gleichzeitig anzuzeigen – was auch das Auslesen der gewählten Informationen spannender als bei Kombinationsfeldern macht.

Wenn das Listenfeld einfach nur wie ein Kombinationsfeld gehandhabt werden soll, das nicht nur den ausgewählten, sondern auch noch weitere Datensätze anzeigt, verhält es sich auch bezogen auf das Auslesen der Daten wie ein Kombinationsfeld: Mit Column(0), Column(1) … lesen Sie die Werte der Felder der Datensatzherkunft für den aktuell ausgewählten Datensatz aus und die Value-Eigenschaft liefert den Wert der gebundenen Spalte, der auch hier meist dem Primärschlüsselfeld entspricht.

Es gibt aber ja noch zwei weitere Varianten, die Sie mit der Eigenschaft Mehrfachauswahl einstellen; mehr dazu weiter unten.

Die beiden Listenfelder des folgenden Beispiels (in der Beispieldatenbank im Formular frmListenfelder zu finden) verwenden als Datensatzherkunft die folgende Abfrage, die vier Felder der Tabelle tblArtikel enthält:

SELECT ArtikelID, Artikelname, Liefereinheit, Einzelpreis FROM tblArtikel;

Dabei markiert das erste Feld ArtikelID das gebundene Feld und wird nicht angezeigt, die anderen Felder hingegen schon. Dafür sorgt die Einstellung der Eigenschaften Spaltenanzahl auf 4 und Spaltenbreiten auf 0cm;3cm;3cm.

Der Einfachheit halber hat das Formular keine Datenherkunft, somit ist auch das Listenfeld nicht an ein Feld der Datenherkunft des Formulars gebunden. Beim Ã-ffnen des Formulars sieht das Listenfeld dann etwa wie in Bild 2 aus; es ist kein Eintrag des Listenfelds markiert. Der folgende Ausdruck liefert daher erwartungsgemäß den Wert Null zurück:

missing image file

Bild 2: Ein Listenfeld ohne …

Forms!frmListenfelder!lstArtikel

Erst nach der Auswahl eines Eintrags wie in Bild 3 liefert dieser Ausdruck die ID des betroffenen Datensatzes.

missing image file

Bild 3: … und eines mit ausgewähltem Datensatz

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar