Eigene Controls mit Access entwickeln

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

Schreibe einen Kommentar