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

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
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:

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

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
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.
3.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 namens
fctData()
, die durch Semikolon getrennte Werte liefert. Die Spaltenanzahl (cColumns
) muss im Code angepasst werden, beim Herkunftstyp wird nurfctFillField
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.
3.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.
3.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.
3.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.
3.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
txtArtikel
angezeigt. 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).
3.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 (Column
fГӨngt, wie fast alle Auflistungen, bei0
an zu zГӨhlen).
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.
EinzelansichtSeiten: 1