Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2010.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie ein Unterformular kennen, dem Sie beliebige Datenherkünfte flexibel zuweisen können.

Techniken

Formulare, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

FlexibleUnterformulare.mdb

Shortlink

www.access-im-unternehmen.de/743

Flexibles Unterformular

André Minhorst, Duisburg

Die Datenherkunft eines Unterformulars ändert sich in der Regel zur Laufzeit nicht - es wird höchstens mal ein Filter oder eine Sortierung angewendet. Gelegentlich soll das gleiche Unterformularsteuerelement zwar mal das Unterformular wechseln, aber auch dies ist kein Problem. Interessant wird es, wenn Sie ein einziges Unterformular zur Laufzeit mit verschiedenen Datenherkünften ausstatten möchten. Sie können zwar Tabellen oder Abfragen statt eines richtigen Formulars als Unterformular angeben, aber diese bieten natürlich keine Möglichkeit, auf Ereignisse zu reagieren. Wir zeigen, wie Sie ein einziges Unterformular flexibel mit beliebigen Daten füllen.

Beiträge wie dieser wurden meist durch einen konkreten Anwendungsfall angeregt. In diesem Fall geht es um den Duplikatmanager aus dem Beitrag Duplikatsuche in Adressen (www.access-im-unternehmen.de/744). Dort soll ein Unterformular die Daten einer Abfrage anzeigen, die mehrfach vorkommende Kombinationen bestimmter Feldwerte enthält. Diese Anzeige soll die doppelt oder öfter vorkommenden Kombinationen allerdings nur in einfacher Ausführung liefern. Der Benutzer wählt dann einen der Einträge aus, woraufhin ein weiteres Unterformular nur die Dubletten dieses ausgewählten Eintrags anzeigt - so kann der Benutzer in Ruhe entscheiden, ob einer oder mehrere der Datensätze gelöscht werden sollen.

Die Anforderung in diesem Fall lautet: Das erste Unterformular soll die Daten einer speziellen Abfrage anzeigen. Dies allein ist kein Problem: Sie können einem Unterformular-Steuerelement zur Laufzeit per VBA nicht nur ein Formular, sondern auch eine Tabelle oder eine Abfrage als Herkunftsobjekt zuweisen. Das geht zum Beispiel so:

Me!sfmSubform.ControlSource = "Table.tblAdressen"

Für eine Abfrage stellen Sie entsprechend das Schlüsselwort Query voran. Für die meisten Fälle ist dies ausreichend. Beim Duplikatmanager soll ein Klick auf einen der Einträge dieses Unterformular bestimmte Daten in einem weiteren Unterformulars anzeigen. Der Benutzer soll nicht erst den Datensatz auswählen und auf eine Schaltfläche klicken müssen. Diese Lösung wäre auch akzeptabel, aber in Anbetracht einer gegebenenfalls großen Menge von Duplikaten zählt jeder Mausklick.

Also wollen wir dem Unterformular ein Ereignis hinzufügen, das auf das Anklicken eines Eintrags reagiert. Für das Beispiel des vorliegenden Beitrags reicht es, wenn einfach ein Meldungsfenster erscheint und die ID des gewählten Datensatzes ausgibt - um alles weitere kümmern wir uns im oben genannten Beitrag. Genau genommen brauchen wir uns nicht auf einen Mausklick zu konzentrieren, sondern es reicht, den Datensatzwechsel zu beobachten - so können wir mit der Ereignisprozedur Beim Anzeigen arbeiten.

Unterformular flexibel gestalten

Das jeweilige Ereignis ist für diesen Beitrag aber ohnehin uninteressant - wir haben hier ganz andere Probleme. Zum Beispiel müssen wir uns überlegen, wie wir einem Formular, dessen Datenherkunft wir noch nicht kennen, die entsprechenden Steuerelemente hinzufügen können.

Theoretisch wird das so ablaufen:

  • Wir weisen der Eigenschaft RecordSource des Formulars den Namen der Tabelle oder Abfrage zu, welche die Daten liefert.
  • Dann fügen wir für jedes Feld der Datenherkunft ein Steuerelement zum Formular hinzu und stellen seine Eigenschaft ControlSource auf das entsprechende Feld ein.

Dies hört sich einfach an, würde aber voraussetzen, dass wir das Formular zunächst per VBA-Code im Entwurf öffnen müssen, die Steuerelemente hinzufügen und erst dann in die Datenblattansicht wechseln können.

Dies ist zwar technisch machbar, aber wir würden hier prinzipiell jedes Mal ein komplett neues Formular erstellen. Wir gehen einen etwas anderen Weg: Wir bereiten gleich beim Erstellen des Formulars eine Reihe von Steuerelementen vor, die bei normalen Anforderungen ausreichen sollten. Eine Adresstabelle sollte etwa mit 20 Feldern auskommen. Wir fügen also vorab 20 Textfelder zu unserem künftigen Unterformular hinzu. Nach dem Zuweisen der Datenherkunft zur Laufzeit durchlaufen wir dann alle darin enthaltenen Felder und weisen der Eigenschaft ControlSource der Textfelder die jeweiligen Namen der Felder der Datenherkunft zu.

Eines haben wir jedoch noch nicht bedacht: Tabellen und Abfragen zeigen nicht immer alle Daten in Textfeldern an, sondern teilweise auch in Kombinationsfeldern und Kontrollkästchen. Wir sollten also für jedes der maximal 20 vorgesehenen Felder der Datenherkunft ein Textfeld, ein Kombinationsfeld und ein Kontrollkästchen vorsehen und jeweils nur das entsprechende Feld mit einem Feld der Datenherkunft verknüpfen.

Steuerelemente anlegen

Legen Sie zunächst ein neues, leeres Formular an und speichern Sie es unter dem Namen sfmFlex. Stellen Sie außerdem seine Eigenschaft Standardansicht auf den Wert Datenblatt ein. Anschließend kümmern wir uns um das Anlegen der Steuerelemente. Natürlich erledigen wir das nicht von Hand, sondern fügen die Steuerelemente per VBA hinzu. Dies erledigt die Prozedur aus Listing 1.

Listing 1: Hinzufügen der Steuerelemente des flexiblen Unterformulars

Public Sub FlexformControls()

    Dim frm As Form

    Dim strForm As String

    Dim i As Integer

    Dim ctl As Control

    strForm = "sfmFlex"

    DoCmd.OpenForm strForm, View:=acDesign

    Set frm = Forms(strForm)

    For i = 1 To 20

        Set ctl = Application.CreateControl(strForm, acTextBox, acDetail)

        ctl.Name = "txt" & Format(i, "00")

        Set ctl = Application.CreateControl(strForm, acLabel, acDetail, ctl.Name)

        ctl.Name = "lbltxt" & Format(i, "00")

        Set ctl = Application.CreateControl(strForm, acCheckBox, acDetail)

        ctl.Name = "chk" & Format(i, "00")

        Set ctl = Application.CreateControl(strForm, acLabel, acDetail, ctl.Name)

        ctl.Name = "lblchk" & Format(i, "00")

        Set ctl = Application.CreateControl(strForm, acComboBox, acDetail)

        ctl.Name = "cbo" & Format(i, "00")

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.