Datenblattansicht aufgebohrt

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Die Datenblattansicht von Access kennt jeder Access-Benutzer: Viele finden diese sogar so praktisch, dass sie ihre Daten direkt in die Datenblattansicht von Tabellen oder Abfragen eingeben. Dies erledigen Sie jedoch besser in Formularen, was allerdings kein Grund ist, auf die Vorzüge der Datenblattansicht zu verzichten. Eher im Gegenteil: Mit ein wenig Finetuning holen Sie alles aus der Datenblattansicht heraus.

Neben Tabellen und Abfragen lassen sich auch Formulare in der Datenblattansicht anzeigen. Dies realisieren Sie ganz einfach über den passenden Wert der Eigenschaft Standardansicht des Formulars. Am schnellsten erstellen Sie ein Formular auf Basis einer Tabelle oder Abfrage in der Datenblattansicht, indem Sie im Datenbankfenster unter Formulare auf Neu klicken, im nun erscheinenden Dialog die Herkunftstabelle oder -abfrage auswählen und doppelt auf den Eintrag AutoFormular: Datenblatt klicken (siehe Bild 1).

pic001.tif

Bild 1: Am schnellsten erzeugen Sie ein Formular in der Datenblattansicht mit diesem Dialog.

Das Ergebnis überrascht nicht besonders: Es erscheint ein Formular, das genau so aussieht wie die Datenblattansicht der zugrunde liegenden Tabelle oder Abfrage.

Datenblattansicht anpassen

Das per "Schnellschuss" erzeugte Formular übernimmt die Feldnamen der Artikel-Tabelle als Spaltenüberschriften. Dies ist nicht unbedingt gewünscht und kann beispielsweise auf die folgenden beiden Arten geändert werden:

  • Wenn das Formular wie in diesem Fall bereits fertig gestellt ist, können Sie in der Entwurfsansicht die Beschriftungen der Felder anpassen. Wenn Sie wie in Bild 2 die Beschriftung des Primärschlüsselfeldes von ArtikelID auf ID ändern, zeigt die Datenblattansicht anschließend die überschrift ID an.
  • pic002.tif

    Bild 2: Entwurfsansicht eines Formulars mit angepasstem Beschriftungsfeld

  • Falls Sie das Formular neu erstellen, können Sie im Entwurf der zugrunde liegenden Tabelle die Eigenschaft Beschriftung des gewünschten Feldes verwenden, um die passende Beschriftung anzugeben. Diese wird dann sowohl in der Datenblattansicht der Tabelle als auch automatisch beim Neuanlegen des Textfeldes im Formular als Beschriftung eingesetzt.

Steuerelemente in der Datenblattansicht

Die Datenblattansicht eines Formulars erlaubt gegenüber der Formular- und der Endlosansicht kein Anlegen weiterer Steuerelemente.

Das ist kein besonderer Nachteil: Erstellen Sie einfach ein neues Formular, fügen Sie das Formular in der Datenblattansicht als Unterformular hinzu und platzieren Sie die notwendigen Steuerelemente im Hauptformular.

Mit einem solchen Hauptformular sorgen Sie außerdem für die in der Datenblattansicht von Formularen gänzlich fehlenden Ränder.

Wenn Sie eine einfache Schaltfläche zum Schließen des Formulars und einen kleinen Rand hinzufügen, sieht das Formular beispielsweise wie in Bild 3 aus.

pic003.tif

Bild 3: Ein Formular in der Datenblattansicht als Unterformular eines weiteren Formulars

üblicherweise stellt Access den Inhalt eines Datenblatts in der Schriftgröße 10 dar. Diesen Wert können Sie auf zwei Arten ändern:

  • Der Optionen-Dialog hält auf der Registerseite Datenblatt unter Standardschriftart eine Eigenschaft namens Schriftgrad bereit, mit dem Sie die Schriftart für die Datenblattansicht vorgeben können.
  • Wenn Sie eine hiervon abweichende Schriftgröße verwenden möchten, müssen Sie das Formular einzeln öffnen (nicht als Unterformular) und aus dem Kontextmenü der Titelleiste den Eintrag Zeichen auswählen (siehe Bild 4). Das Gleiche funktioniert übrigens auch in der Datenblattansicht von Tabellen und Abfragen.
pic004.tif

Bild 4: Einstellen der Zeichen-Eigenschaften eines Formulars in der
Datenblattansicht

Daten in der Datenblattansicht
schreibgeschützt anzeigen

Listenfelder setzt man in der Regel ein, wenn man die darin enthaltenen Daten nicht bearbeiten muss.

Das bedeutet nicht, dass Sie die Datenblattansicht nur verwenden können, wenn der Benutzer auch die Daten bearbeiten können soll – im Gegenteil: Sie können auch die Daten in der Datenblattansicht vor unbeabsichtigtem Bearbeiten schützen.

Dazu stellen Sie einfach die Eigenschaft Recordsettyp auf den Wert Snapshot ein.

Etwas störend wirkt allerdings, dass beim Klicken in eines der Textfelder eines Datensatzes die Einfügemarke erscheint und suggeriert, dass man die enthaltenen Daten doch bearbeiten kann.

Das lässt sich leicht verhindern: Sie müssen dazu einfach nur den kompletten Datensatz markieren. Die notwendige Anweisung lautet:

DoCmd.RunCommand acCmdSelectRecord

Dies wirkt sich so aus, als wenn Sie mit der Maus auf den Datensatzmarkierer am linken Rand klicken: Der komplette Datensatz wird mit einem schwarzen Hintergrund versehen und die blinkende Einfügemarke wird ausgeblendet (siehe Bild 5).

pic005.tif

Bild 5: Eine einfache DoCmd-Methode markiert den aktuellen Datensatz.

Nun müssen Sie nur noch dafür sorgen, dass diese Anweisung auch beim Klick auf jedes der Steuerelemente ausgeführt wird.

Sie könnten jetzt für jedes Steuerelement eine passende Ereignisprozedur anlegen und den Befehl dort einfügen, aber das ist erstens nicht besonders elegant und zweitens eine ziemliche Fleißarbeit.

Steuerelementereignisse abfangen

Also bauen Sie sich zwei Klassen, mit denen vereinfacht Folgendes passiert: Das Formular instanziert beim öffnen die erste Klasse clsDataSheetForm (s. Listing 1) und weist ihrem Parameter DataSheetForm einen Verweis auf sich selbst zu.

Listing 1: Die Klasse clsDataSheetForm

Option Compare Database
Option Explicit
Private mForm As Access.Form
Private colControls As Collection
Dim mDataSheetControl As clsDataSheetControl
Public Property Set DataSheetForm(frm As Form)
     Dim ctl As Control
     Set mForm = frm
     Set colControls = New Collection
    
For Each ctl In mForm.Controls
    
Select Case ctl.ControlType
    
Case acTextBox, acComboBox, acListBox
     Set mDataSheetControl = New clsDataSheetControl
     Set mDataSheetControl.DataSheetControl = ctl
     colControls.Add mDataSheetControl
    
End Select
    
Next ctl

End Property

Die Klasse verwendet diesen Verweis, um alle Steuerelemente des Formulars zu durchlaufen, die den Typ Textfeld, Kombinationsfeld oder Listenfeld besitzen. Hier kommt die zweite Klasse clsDataSheetControl ins Spiel (s. Listing 2): Die erste Klasse erzeugt für jedes Steuerelement ein Objekt der zweiten Klasse und fügt ihm über die Eigenschaft DataSheetControl einen Verweis auf das jeweilige Steuerelement zu.

Listing 2: Die Klasse clsDataSheetControl

Option Compare Database
Option Explicit
Private WithEvents mTextBox As Access.TextBox
Private WithEvents mListBox As Access.ListBox
Private WithEvents mComboBox As Access.ComboBox
Public Property Set DataSheetControl(ctl As Control)
     Select Case ctl.ControlType
         Case acTextBox
             Set mTextBox = ctl
             mTextBox.OnMouseDown = "[Event Procedure]"
             mTextBox.OnDblClick = "[Event Procedure]"
        
Case acComboBox
             Set mComboBox = ctl
             mComboBox.OnMouseDown = "[Event Procedure]"
             mComboBox.OnDblClick = "[Event Procedure]"
        
Case acListBox
             Set mListBox = ctl
             mListBox.OnMouseDown = "[Event Procedure]"
             mListBox.OnDblClick = "[Event Procedure]"
    
End Select

End Property
Private Sub mComboBox_DblClick(Cancel As Integer)
     ZeileMarkieren
End Sub
Private Sub mComboBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     ZeileMarkieren
End Sub
Private Sub mListBox_DblClick(Cancel As Integer)
     ZeileMarkieren
End Sub
Private Sub mListBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     ZeileMarkieren
End Sub
Private Sub mTextBox_DblClick(Cancel As Integer)
     ZeileMarkieren
End Sub
Private Sub mTextBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     ZeileMarkieren
End Sub
Private Sub ZeileMarkieren()
     DoCmd.RunCommand acCmdSelectRecord
End Sub

Die dabei verwendete Property Set-Methode prüft wiederum, welchen Typ das Steuerelement hat, und weist es entsprechend einer der Objektvariablen mTextBox, mComboBox oder mListBox zu.

Mit dem Verweis auf dieses Steuerelement kann die Klasse nun eine Menge anstellen – zum Beispiel kann es den Eigenschaften des Steuerelements Werte hinzufügen.

In diesem Fall sollen zwei Ereigniseigenschaften mit dem Wert [Event Procedure] gefüllt werden – nämlich die Eigenschaften OnMouseDown und OnDblClick.

Dies entspricht exakt der Vorgehensweise, wenn Sie den Ereigniseigenschaften im Eigenschaftsfeld den Wert [Ereignisprozedur] zuweisen – nur eben per Code und vollautomatisch.

Die Frage ist nun: Wohin mit den passenden Ereignisprozeduren Die kann man ja nicht einfach nach dem öffnen zum Klassenmodul des Formulars hinzufügen, weil dies einen Wechsel in die Entwurfsansicht bedeuten würde.

Aber das ist auch gar nicht nötig: Immerhin sind die drei Objektvariablen mTextBox, mComboBox und mListBox bereits als WithEvents deklariert, was bedeutet, dass sie die Ereignisse, die für das Objekt, auf das Sie verweisen, ausgelöst werden, abfangen können.

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