Zum Inhalt dieser Seite

Access-Grundlagen #3 - Formulare

3.1 Daten aus anderen Tabellen anzeigen 3.2 Verweis auf Steuerelement in Unterformular
3.3 Bedingte Formatierung 3.4 Kombinationsfelder
3.5 Optionsgruppen

Nach oben 3.1 Daten aus anderen Tabellen anzeigen

Wenn man auf einem Formular mit Hilfe eines Textfelds einen Wert aus einer anderen Tabelle anzeigen lassen will, kann man z.B. die Funktion DLookup() bzw. DomWert()verwenden. Г„hnliches gilt natГјrlich auch fГјr die anderen Aggregatfunktionen fГјr DomГӨnen wieDCount(), DSum() etc. (s. VBA-Hilfe). Гңbrigens finden Sie im VBA-Abschnitt unter 6.6 Ersatz fГјr DomГӨnenaggregat-Funktionenschnellere AbfragemГ¶glichkeiten.

Bei nummerischen Feldern der DomГӨne (Tabelle) im Kriterienteil verwendet man folgenden Steuerelementinhalt.

=DomWert("[Nachname]";"[Betreuer]";"[KundenID] = " & intKundenID)

Damit wird in der Tabelle "Betreuer" der "Nachname" nachgeschlagen, bei dem der Wert der (nummerischen) "KundenID" gleich dem Wert des Textfeldes "intKundenID" ist.

Bei nicht nummerischen Feldern im Kriterienteil muss das Kriterium in einfache AnfГјhrungszeichen gesetzt werden.

=DomWert("[Art]";"[Arten]";"[Beschreibung] = '" & txtBeschreibung & "'")

Damit wird in der Tabelle "Arten" die "Art" nachgeschlagen, bei der der Wert von "Beschreibung" gleich dem Wert des Textfeldes "txtBeschreibung" ist.

Bei Datumsfeldern wird es wieder etwas komplizierter (s. dazu auch FAQ 6.8):

=DomWert("[ID]";"[Einkaeufe]";"[Einkauf am] = " & Format([Datumsfeld];"\#jjjj\-mm\-tt\#"))

Damit wird in der Tabelle "Einkaeufe" die "ID" nachgeschlagen, bei der der "Einkauf am" gleichen Datum wie am angezeigten "Datumsfeld" stattgefunden hat.

Mehrere Kriterien mГјssen mitAND (bzw. OR- je nachdem ...) verknГјpft werden:

=DomAnzahl("*";"[tblKunden]";"[Nachname] LIKE '*" & txtSuchName & "*' AND Geschlecht='w'")

Damit werden alle Damen (festes Kriterium Geschlecht='w') in der Tabelle "tblKunden" gezГӨhlt, deren Nachname den in "txtSuchName" gesuchten String enthГӨlt.

Einzelansicht

Nach oben 3.2 Verweis auf Steuerelement in Unterformular

Eigentlich ist dies auch schon unter FAQ 4.2beschrieben. Leider gibt es dabei aber immer wieder Probleme. Angenommen man hat ein Hauptformular namens "frmKunden" und will in diesem auf ein Steuerelement (mit Namen "GesamtEinnahmen") des darin eingebundenen Unterformulares verweisen. Obwohl man ganz ausfГјhrlich

=Formulare!frmKunden!frmKunden_UF_Bestellungen.Formular!GesamtEinnahmen

als Steuerelementinhalt verwendet, erhГӨlt man in der Formularansicht als Resultat"#Name?".
LГ¶sung: Man muss an der Stelle1 (s. Screenshot) den Namen des Unterformular-Steuerelementes einsetzen (2 im Screenshot) und nicht den Namen des Herkunftsobjektes (3). Hier der Screenshot, bei dem es nichtfunktionieren wГјrde:

Ansicht Formular und Unterformular

Mit dem Steuerelementinhalt

=Formulare!frmKunden!UF_Bestellungen.Formular!GesamtEinnahmen

mГјsste es somit also gehen. Wenn anschliessend immer noch"#Fehler"als Resultat erscheint, kann es an dem Namen des Steuerelementes im Unterformular liegen (hier mГјsste man danach "GesamtEinnahmen" noch einmal kontrollieren).

Anmerkung zu VBA:In VBA muss man genauso vorgehen. Man muss dort natГјrlich "Formulare" und "Formular" wieder ins Englische Гјbersetzen ("Forms" und "Form").

Einzelansicht

Nach oben 3.3 Bedingte Formatierung

Der folgende Hinweis gilt erst ab Access 2000, davor gab es die bedingte Formatierung noch nicht (s. FAQ 4.1).

ZunГӨchst markiert man das gewГјnschte Textfeld (1) in der Entwurfsansicht des Formulares und geht anschliessend auf den MenГјpunkt "Format" bzw. verwendet den TastenschlГјsselALT+T ( 2), wo man den Punkt "Bedingte Formatierung..." finden sollte:

Screenshot zum Auffinden der bed. Formatierung

Danach Г¶ffnet sich der folgende Dialog, in dem man die gewГјnschten Einstellungen vornehmen kann:

EinstellmГ¶glichkeiten bei der bedingten Formatierung

Ganz oben (1) findet man die Standardformatierung, die gilt, wenn keine andere Bedingung zutrifft. Unter (2) wГӨhlt man die gewГјnschte Bedingungsart, bei (3) wird der erforderliche Ausdruck eingegeben. Im Bereich, der bei (4) zu finden ist, kann man die Formatierung endlich einstellen. Die Symbole von links nach rechts bedeuten "Fett", "Kursiv", "Unterstrichen", "FГјll-/Hintergrundfarbe", "Schrift-/Vordergrundfarbe", "Aktiviert".

Einzelansicht

Nach oben 3.4 Kombinationsfelder

Kombinationsfelder haben im Vergleich zu einfachen Textfeldern mehr Eigenschaften, die anfangs vielleicht etwas verwirrend sind und manchmal fГјr den AnfГӨnger zu unerwarteten Ergebnissen fГјhren. Vor allem die EigenschaftGebundene Spalte hat schon so manchen zur Verzweiflung gebracht.

Nach oben3.4.1 Herkunftstyp

Beim Anlegen des Kombinationsfeldes wird man bei aktiviertem Steuerelement-Assistenten gefragt, ob das Kombinationsfeld auf einer Abfrage bzw. Tabelle basieren soll, oder ob man selbst Werte eingeben mГ¶chte. Daraus ergeben sich dann die beiden Typen Tabelle/Abfrage oder Wertliste. SonderfГӨlle sind die Herkunftstypen Feldliste und eine "Callback"-Funktion.

  • Tabelle/Abfrage: Zugriff auf eine Tabelle bzw. Abfrage (mittels gespeicherter Abfrage oder SQL-String).
  • Wertliste: Zugriff auf eine festgelegte Auswahl, deren Werte durch Semikola getrennt werden. Durch Festlegen der Spaltenanzahlwird automatisch nach x Werten eine neue Zeile ("Datensatz") im Kombinationsfeld angelegt. Bei beispielsweise 2 Spalten und 6 EintrГӨgen erhГӨlt man also 3 "DatensГӨtze".
  • Feldliste: Zugriff auf die Feld- oder Spaltennamen in einer Tabelle/Abfrage.
  • Callback-Funktion: Falls man per VBA eine Wertliste generieren mГ¶chte, diese aber ab 2048 Zeichen abgeschnitten wird, kann man das Kombinationsfeld auch mit einer selbst erstellten Funktion befГјllen. Im folgenden Beispielcode gibt es eine Funktion namensfctData(), die durch Semikolon getrennte Werte liefert. Die Spaltenanzahl (cColumns) muss im Code angepasst werden, beim Herkunftstyp wird nur fctFillField eingetragen (ohne Gleichzeichen oder Klammern):

    Public Function fctFillField(ctl As Control, ID As Long, lRow As Long, lCol As Long, s As Integer)
     
    Const cColumns = 4
    Dim vRet As Variant
    Static vEntries As Variant
     
    'fctData() liefert nur die Rohdaten und wird hier nicht aufgefГјhrt:
    If IsEmpty(vEntries) Then vEntries = Split(fctData(), ";")
     
    Select Case s
      Case 0                                        'Initialisieren
        vRet = True
      Case 1                                        'Г–ffnen mit eindeutiger ID fГјr das Listenfeld
        vRet = Timer
      Case 3                                        'Zeilenanzahl
        vRet = (UBound(vEntries) + 1) / cColumns
      Case 4                                        'Spaltenanzahl
        vRet = cColumns
      Case 5                                        'Spaltenbreiten (True, um nichts zu ГӨndern)
        vRet = True
      Case 6                                        'Mit Daten befГјllen
        vRet = vEntries(lRow * cColumns + lCol)
      Case 7                                        'Abschluss
    End Select
     
    fctFillField = vRet
     
    End Function
     

Empfehlenswert ist bis auf wenige Ausnahmen der Herkunftstyp Tabelle/Abfrage, da so Sortierungen leichter mГ¶glich sind, die Auswahl einfacher angepasst werden kann usw.

Nach oben3.4.2 Datensatzherkunft

Je nachdem, was beim HerkunftstypausgewГӨhlt wurde, steht hier nur ein Tabellen-/Abfragename bzw. ein SQL-String (Herkunftstypen Tabelle/Abfrage bzw. Feldliste) oder eine durch Semikola getrennte Herkunft (Wertliste). Bei einer Callback-Funktion bleibt der Eintrag leer! Durch Anpassen des SQL-Strings mittels Aufruf des Abfrageeditors kann beim bereits empfohlenen Herkunftstypen "Tabelle/Abfrage" die Datensatzherkunft leicht eingeschrГӨnkt, sortiert oder anderweitig manipuliert werden. Beim Typ Wertliste muss die Anpassung ohne weitere Hilfsmittel vorgenommen werden.

Nach oben3.4.3 Spaltenanzahl

Die Spaltenanzahl sollte immer mit der Datensatzherkunft korrespondieren. Das heisst, wenn eine Abfrage verwendet wird, die insgesamt 2 Spalten selektiert, so sollte hier auch 2 eingestellt werden.

Nach oben3.4.4 SpaltenГјberschriften

StandardmГӨssig steht diese Eigenschaft auf "Nein". Wenn hier "Ja" eingestellt wird, erscheint oberhalb der DatensГӨtze im Kombinationsfeld ein nicht selektierbarer Eintrag mit den Feldnamen. Bei einer Feldliste fГјhrt "Ja" dazu, dass der erste Feldname nicht ausgewГӨhlt werden kann, deshalb ist diese Einstellung eher nur fГјr dieHerkunftstypen Tabelle/Abfrage oder Wertliste bzw. bei einer Callback-Funktion sinnvoll.

Nach oben3.4.5 Spaltenbreiten

Hiermit legt man fest, was das Kombinationsfeld beim Aufklappen und nach der Auswahl eines Wertes Гјberhaupt anzeigt. Angenommen man hat eine Abfrage wie diese hier als Datensatzherkunft:

SELECT
  [tblArtikel].[idArtikel],
  [tblArtikel].[txtArtikel],
  [tblArtikel].[idArtikelGruppe]
FROM tblArtikel
ORDER BY [tblArtikel].[txtArtikel], [tblArtikel].[idArtikelGruppe];
 

und stellt nun die Spaltenbreiten auf 0cm;4cm;2cm, dann werden beim Aufklappen das Feld idArtikel nicht zu sehen und nur die beiden folgenden Felder Spalten txtArtikel und idArtikelgruppe sichtbar sein. Nach der Auswahl und dem Zuklappen des Kombinationsfeldes wird nur noch das Feld txtArtikelangezeigt. Oder allgemeiner formuliert: Die erste Spalte mit einer Breite > 0cm wird angezeigt. In der Klappliste kГ¶nnen mehr als eine Spalte angezeigt werden, aber im zugeklappten Kombinationsfeld wird immer nur der Wert aus der ersten Spalte der Klappliste angezeigt.Der angezeigte Wert kann von dem tatsГӨchlich zu speichernden Wert abweichen(s. nГӨchster Abschnitt:Gebundene Spalte).

Nach oben3.4.6 Gebundene Spalte

Die gebundene Spalte gibt an, welcher Wert tatsГӨchlich durch Auswahl eines Eintrages gespeichert wird. Falls man dieselbeDatensatzherkunft wie unter SpaltenbreitenaufgefГјhrt verwendet, und die gebundene Spalte auf 1 steht, sowie die Spaltenbreiten auf 0cm;4cm;2cm eingestellt wurden, dann wird der Wert aus der ersten Spalte idArtikel gespeichert und nicht der nachher angezeigte Wert aus txtArtikel!

Um auf den angezeigten Wert aus der 2. Spalte zuzugreifen (also txtArtikel), muss man z.B.mit VBA, wie unter FAQ 4.15erlГӨutert wird, mitMe![KombinationsfeldName].Column(1) arbeiten (ColumnfГӨngt, wie fast alle Auflistungen, bei0an zu zГӨhlen).

Einzelansicht

Nach oben 3.5 Optionsgruppen

Optionsgruppen sind anders anzusprechen als KontrollkГӨstchen. D.h., wenn ein bestimmter Punkt per Code markiert werden soll, darf nicht das einzelne Optionsfeld auf True gesetzt werden (das geht auch gar nicht), sondern die Optionsgruppe selbst muss auf den dem Optionsfeld zugeordneten Wert gesetzt werden. GrundsГӨtzlich sind diese Werte nicht True oder False, sondern "normale" nummerische Werte, wie sie beim Anlegen der Optionsgruppe mittels des Assistenten vom User vorgegeben wurden.

Man sollte also zunГӨchst den Namen der Optionsgruppe ermitteln: Dazu den Gruppenrahmen im Entwurf markieren und danach das Eigenschaftsfenster Г¶ffnen. StandardmГӨГҹig werden Optionsgruppen mit RahmenXYZ (XYZ steht fГјr eine fortlaufende Nummer) benannt. Und dieser Name wird im Code verwendet/angesprochen. Hier ein einfaches Beispiel fГјr das Formular-Ereignis "Beim Laden":

Private Sub Form_Load()
 
Me!Rahmen5 = 2
 
End Sub
 

Г„hnlich muss man vorgehen, wenn ein Standardwert gesetzt werden soll: Rahmen und nicht ein untergeordnetes Optionsfeld markieren und das Eigenschaftsfenster aufrufen.

Einzelansicht
Home