Bedingte Schaltflächen

Haben Sie sich auch schonmal darüber geärgert Sie wollen einem Endlosformular Schaltflächen zuweisen, die mal aktiviert sind und mal nicht – oder auch mal ausgeblendet oder auch nicht. Dummerweise erlaubt die Endlosansicht aber für ungebundene Steuerelemente keine vom jeweiligen Datensatz abhängigen Einstellungen. Zum Glück kann man mit Access hier und da tricksen – und so stellen wir in diesem Beitrag Möglichkeiten vor, wie Sie in den verschiedenen Access-Versionen doch noch anklickbare Steuerelemente mit individuellem Aussehen offerieren.

Die Möglichkeiten unterschieden sich dabei je nach der Access-Version, wobei es von Version zu Version leichter wird, entsprechende Schaltflächen bereitzustellen beziehungsweise zu simulieren (in der Tat gelang es uns mit keiner Version, eine echte Schaltfläche mit wechselnden Icons, Beschriftungen oder Eigenschaften zu versehen – dazu mussten andere Steuerelemente wie Textfelder oder Bildsteuerelemente herhalten).

In Access 2003 und älter sind wir auf die Verwendung von Texten und Sonderzeichen beschränkt, ab Access 2007 bietet das Bildsteuerelement durch seine Eigenschaft als gebundenes Steuerelement weitaus bessere Möglichkeiten. Diese werden unter Access 2010 noch getoppt.

Grundsätzlich besteht das Problem darin, dass das Zuweisen eines Wertes zu einer Eigenschaft eines Steuerelements sich immer auf alle Datensätze auswirkt. Das bedeutet, dass Sie etwa eine Schaltfläche nicht für einen Datensatz ausblenden oder deaktivieren können und für die anderen nicht – es werden immer alle Schaltflächen ausgeblendet oder deaktiviert.

Die einzige Möglichkeit, ein Steuerelement in einem Datensatz über eine Eigenschaft anders als das gleiche Steuerelement in den übrigen Datensätzen zu gestalten, findet sich in der Eigenschaft Steuerelementinhalt.

Dabei ist der eigentliche Wert der Eigenschaft natürlich immer für alle Datensätze gleich, aber das durch die Eigenschaft referenzierte Feld liefert je nach Datensatz unterschiedliche Werte. Die zweite Möglichkeit, ein Steuerelement in verschiedenen Datensätzen unterschiedlich zu gestalten, liegt in der bedingten Formatierung – die soll jedoch nicht Thema des vorliegenden Beitrags sein.

Beispielanwendung

Damit es nicht zu kompliziert wird, soll in einem Beispielformular in der Endlosansicht eine schaltflächenartige Möglichkeit geboten werden, einen Datensatz zu löschen, wenn ein Ja/Nein-Feld namens Loeschen den Wert True enthält.

Die übrigen Felder der Beispieltabelle sind ein Primärschlüsselfeld (BeispielID) und ein Textfeld (Beispieltext) mit beliebigen Inhalten. Das Ja/Nein-Feld steht stellvertretend für beliebig komplexe Ausdrücke, die festlegen, ob eine Schaltfläche aktiviert sein soll oder nicht. Der Wert des gewünschten Ausdrucks kann dann in einer Abfrage als Boolean-Wert zur Datenherkunft des Formulars in der Endlosansicht hinzugefügt werden.

Bedingte Schaltflächen unter Access 2003 und älter

Unter Access 2003 und älter ist der höchste Grad an Improvisation gefragt. Hier steht noch nicht einmal ein Bild-Steuerelement bereit, dem man ein schickes Icon zuweisen könnte.

Also verwenden Sie entweder ein Textfeld mit einem entsprechenden Text (Löschen oder X). Dieser Text soll jedoch nur angezeigt werden, wenn das Feld Loeschen auch den Wert True enthält, der Benutzer den Datensatz also löschen können soll. Damit der gewünschte Text nur in diesem Fall angezeigt wird, fügen Sie der Eigenschaft Steuerelementinhalt des Textfeldes etwa den folgenden Ausdruck hinzu:

=Wenn([Loeschen];"X";"")

In der Entwurfsansicht sieht das Formular nun etwa wie in Bild 1 aus. Zur optischen Hervorhebung können Sie die Textfarbe noch auf Rot und die Schriftbreite auf Fett einstellen.

pic002.png

Bild 1: Das Formular mit der datenabhängigen Löschen-Schaltfläche in der Entwurfsansicht

Nun lässt sich das Textfeld durchaus mit einem Beim Klicken-Ereignis versehen. Dummerweise landet beim Anklicken auch der Fokus im Textfeld, was sich durch die blinkende Einfügemarke bemerkbar macht – das sieht natürlich nicht besonders professionell aus.

Also legen Sie noch eine Schaltfläche mit gleichen Abmessungen genau über das Textfeld und stellen seine Eigenschaft Transparent auf Ja ein. Nun legen Sie noch eine entsprechende Ereignisprozedur für das Ereignis Beim Klicken der Schaltfläche an, die etwa wie folgt aussieht:

Private Sub cmdLoeschen_Click()
    If Me!Loeschen = True Then
        If MsgBox("Datensatz wirklich löschen", vbYesNo, "Löschen") = vbYes Then
            DoCmd.RunCommand acCmdDelete
        End If
    End If
End Sub

Dies führt zu einer Ansicht wie in Bild 2.

pic001.png

Bild 2: Löschen-Schaltfläche, die in Abhängigkeit von den Daten ein- oder ausgeblendet wird.

Bedingte Schaltflächen in Access 2007

Access 2007 liefert mit dem Anlagefeld und mit der Eigenschaft Steuerelementinhalt für das Bild-Steuerelement eine Möglichkeit, Icons in Abhängigkeit vom jeweiligen Datensatz anzuzeigen. Da Access 2007 mit der Einführung des Ribbons einen großen Schritt in Richtung benutzerfreundlicherer Oberflächen macht, was sich auch durch das einfache Anbringen von Icons auf Schaltflächen bemerkbar macht, wollen wir dies auch für die Endlosansicht von Formularen ermöglichen.

Auch hier können Sie leider keine echte Schaltfläche verwenden, aber wir gelangen immerhin von einer reinen Text-Schaltfläche zu einer Schaltfläche mit Icon.

Wir nähern uns der Lösung Schritt für Schritt an. Im ersten Schritt erhält die Tabelle tblBeispiel ein zusätzliches Feld namens LoeschenBild, das als Anlage-Feld ausgeführt ist und für den ersten Datensatz ein Löschen-Icon im .png-Format enthält. Damit diese Lösung sauber arbeitet, müssen Sie übrigens die Option Bildeigenschaften-Speicherformat auf den Wert Quellbildformat beibehalten einstellen. Wenn Sie alle Felder zum Detailbereich eines neuen Formulars in der Endlos-Ansicht hinzufügen und diese entsprechend anordnen, erhalten Sie ein Bild wie in Bild 3.

pic003.png

Bild 3: Löschen-Symbol für einen Datensatz

Das ist jedoch nur Übung zum Aufwärmen: Immerhin zeigt das Formular nun nur das im Anlagefeld des jeweiligen Datensatzes gespeicherte Icon an – statt eines Icons, das je nach dem Wert des Feldes Loeschen ein- oder ausgeblendet wird.

Um zum Wert des Feldes Loeschen jeweils den richtigen Wert anzuzeigen, erstellen Sie zunächst eine Tabelle mit den zu verwendenden Icons. Diese enthält die drei Felder IconID, Icon (Anlagefeld) und Wert (Feld zum Zuordnen des Icon-Datensatzes zum entsprechenden Datensatz der Tabelle tblBeispiel) – siehe auch Bild 4.

pic004.png

Bild 4: Entwurf der Tabelle zum Speichern der Icons

Bild 5 zeigt die Tabelle mit den beiden für dieses Beispiel notwendigen Datensätzen. Das Icon im Anlagefeld des ersten Datensatzes soll angezeigt werden, wenn das Feld Loeschen der Tabelle tblBeispiel den Wert True, also -1, enthält. Der zweite Datensatz ist für den Wert False, also 0, bestimmt.

pic005.png

Bild 5: In der Tabelle tblIcons gespeicherte Bilddateien

Nun erstellen Sie eine Abfrage, welche die Tabelle tblBeispiel und die Tabelle tblIcons zusammenführt. Diese Abfrage enthält beide Tabellen und verknüpft diese über die Felder Loeschen und Wert (s. Bild 6).

pic006.png

Bild 6: Zusammenführen der Daten und der Bilder in einer Abfrage

In Bild 7 haben wir die beiden Felder Loeschen, Icon.Filename und Wert noch zum Abfrageergebnis hinzugefügt, damit die verwendete Technik noch besser erkennbar ist. Über die verknüpften Felder Loeschen und Wert wird den Datensätzen der Tabelle tblBeispiel dort die jeweils richtige Abbildung hinzugefügt.

pic007.png

Bild 7: Beispieldatensätze und Bilder in einer Abfrage

Richtig sichtbar wird dies freilich erst im Anlagefeld im Formular. Das Formular heißt frmBeispielMitBild und verwendet die Abfrage qryBeispielMitBild als Datenherkunft. Es zeigt die Felder BeispielID, Beispieltext und Icon an (s. Bild 8).

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar