Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Christoph Spielmann, Düsseldorf
Zu einer guten Entwicklungsumgebung gehört normalerweise die Möglichkeit, dass sich die zur Verfügung gestellten Bausteine wie Klassen, Objekte und Steuerelemente mit den Bordmitteln beliebig erweitern und ergänzen lassen. Leider ist Access hier insbesondere im Bereich der Steuerelemente gravierend eingeschränkt. Dieser Artikel zeigt Ihnen, wie Sie trotzdem neue Controls mit Access entwickeln und einsetzen können.
Eine besondere Eigenschaft von Steuerelementen ist, dass Sie ein einziges Mal programmiert bzw. definiert werden und dann in unterschiedlichen Formularen beliebig oft eingesetzt werden können.
Eine weitere Eigenschaft ist, dass sie universell einsetzbar sind und sich je nach Einsatzgebiet ggf. an die besonderen Bedingungen anpassen lassen. Solche Eigenschaften stellen unter Access im Prinzip alle eingebauten Steuerelemente zur Verfügung, jedoch bietet nur ein Steuerelement die Möglichkeit zur individuellen Programmierung. Hierbei handelt es sich um das Unterformular-Steuerelement.
Die Besonderheit dieses Steuerelements ist, dass Sie hier ein beliebiges Formular innerhalb eines anderen Formulars anzeigen können. Dies funktioniert natürlich auch mehrfach.
So kann beispielsweise ein Unterformular innerhalb eines Formulars auch mehrmals angezeigt werden.
Das Unterformular-Steuerelement sorgt hierbei automatisch dafür, dass von dem betreffenden Formular mehrere Instanzen erzeugt werden, die zwar auf der gleichen Formulardefinition basieren, aber ansonsten unabhängig sind. Beispielsweise kann der Wert einer privaten Variablen in den unterschiedlichen Instanzen auch unterschiedliche Werte annehmen, obwohl diese Variable nur ein einziges Mal definiert ist.
In diesem Zusammenhang verwendet man häufig die beiden Begriffe Klasse und Objekt. Eine Klasse ist eine Schema-Definition, also quasi eine Bauanleitung. Auf der Basis einer Klasse können dann mehrere Objekte (oder Objektinstanzen) erzeugt werden.
Bei einem Formular innerhalb des Datenbankfensters von Access handelt es sich immer um eine Klasse. Erst wenn Sie das Formular öffnen, wird ein entsprechendes Objekt erzeugt.
Mit Hilfe von VBA-Programmcode ist es sogar möglich, mehrere Objektinstanzen eines Formulars zu erzeugen.
Das Formular erscheint in diesem Fall mehrfach auf dem Bildschirm, was zum Beispiel bei der gleichzeitigen Bearbeitung mehrerer Datensätze Sinn machen könnte.
Einen ähnlichen Effekt erzielen Sie, wenn Sie ein Formular mehrmals als Unterformular in ein Hauptformular einbetten.
Um die Anlage der einzelnen Objektinstanzen kümmert sich in diesem Fall Access selbst.
Bild 1: Die PickList im Einsatz
Bild 2: Aufbau der Tabelle tblAdressen
Bild 3: Das Formular frmTest in der Entwurfsansicht
Das hier vorgestellte Beispiel zeigt Ihnen, wie Sie eine so genannte „Pick-List“ als Steuerelement realisieren. Hierbei handelt es sich um zwei Listenfelder, zwischen denen Sie Einträge durch Doppelklicks von links nach rechts übernehmen können (siehe Bild 1).
Solche Steuerelemente werden z. B. dann eingesetzt, wenn Sie aus einer Tabelle mehrere Einträge selektieren möchten.
Eine wichtige Anforderung an dieses Steuerelement ist, dass es möglichst universell und ohne viel Programmieraufwand eingesetzt werden kann.
Dementsprechend greift das Steuerelement nicht direkt auf eine bestimmte Access-Tabelle zu, sondern erwartet die Angabe der Tabelle als Konfigurationsparameter. Einzige Anforderung ist, dass die zugrunde liegende Tabelle ein aktualisierbares Ja/Nein-Feld enthält.
In der Beispieldatenbank Control.mdb finden Sie eine entsprechende Tabelle namens tblAdressen (siehe Bild 2). Das Ja/Nein-Feld IstAusgewählt bestimmt hierbei, ob die Adresse (z. B. für einen Serienbrief) selektiert ist.
Weiterhin enthält die Beispieldatenbank das Formular ctlPickList, also das eigentliche Steuerelement sowie das Formular frmTest (siehe Bild 3) als Test-Container für das Steuerelement. Innerhalb des Formulars frmTest befindet sich ein Unterformular-Steuerelement, das ebenfalls den Namen ctlPickList trägt.
Private Sub Form_Load() Me.ctlPickList.Form.SetDataSource "tblAdressen", _ "Nachname", "AdresseID", "IstAusgewählt", "" End Sub
Quellcode 1
Public Sub SetDataSource(DataSource As String, _ DisplayField As String, KeyField As String, _ SelectionField As String, Condition As String) m_DataSource = DataSource m_DisplayField = DisplayField m_KeyField = KeyField m_SelectionField = SelectionField m_Condition = Condition RefreshData End Sub
Quellcode 2
Option Compare Database Option Explicit Private m_DataSource As String Private m_DisplayField As String Private m_KeyField As String Private m_SelectionField As String Private m_Condition As String
Quellcode 3
Hier ist das gleichnamige Formular als Unterformular untergebracht. Damit das Steuerelement nicht als Unterformular erkennbar ist, sind sämtliche Rahmen und Navigationselemente des Unterformulars ausgeblendet.
Wie bereits angedeutet, ist eine wesentliche Anforderung an das Steuerelement eine einfache Benutzung. Dementsprechend erfolgt die Initialisierung des Steuerelements durch nur eine Programmzeile im Load-Ereignis des Formulars frmTest (s. Quellcode 1).
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo