Datenblattansicht aufgebohrt

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 (s. Abb. 1).

pic001.tif

Abb. 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 Abb. 2 die Beschriftung des Primärschlüsselfeldes von ArtikelID auf ID ändern, zeigt die Datenblattansicht anschließend die überschrift ID an.
  • pic002.tif

    Abb. 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 Abb. 3 aus.

pic003.tif

Abb. 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 (s. Abb. 4). Das Gleiche funktioniert übrigens auch in der Datenblattansicht von Tabellen und Abfragen.
pic004.tif

Abb. 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 (s. Abb. 5).

pic005.tif

Abb. 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

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar