# Kombinationsfeld in Access



## starbug (22. November 2011)

Hallo ,

nochmal ne Frage zu Access. Ich habe ein Formular mit Unterformular.
In einem Kombinationsfeld stehen verschiedene Städte. Wähle ich 
z.B. Berlin aus, so sollen im Unterformular alle Produkte angezeigt
werden die man in Berlin kaufen kann. Wie muss ich das Kombinationsfeld
formatieren damit es genauso funktioniert bzw. ist sowas mit einem 
Kombinationsfeld überhaupt möglich?


----------



## tombe (22. November 2011)

Bei den Eigenschaften des Unterformulars gibt es die Angaben "Verknüpfen von" und "Verknüpfen nach".

Hier musst du angeben welche Felder für das Filtern des Unterformulars zuständig sind, bei dir das Kombinationsfeld aus dem Hauptformular und das entsprechende Feld im Unterformular.


----------



## starbug (22. November 2011)

Hmm hab ich gefunden geht aber nicht. Also ich hab 2 Tabellen, in der einen steht nur die ID und eine
Stadt und in der anderen meine Artikel wobei ich in einer Spalte die IDs der Städte als Fremdschlüssel zuweise. Also muss ich doch bei "Verknüpfen von" meine Städtetabelle angeben und bei 
"Verknüpfen nach" meine Artikel Tabelle oder nicht?


----------



## tombe (22. November 2011)

Ich vermute mal das das Kombinationsfeld als Wert den Namen der Stadt liefert und nicht die ID die du für das Unterformular brauchst.

Man kann aber Kombinations- und Listenfelder so einstellen das sie (wie hier) den Namen anzeigen aber als Wert die ID liefern.

Dafür in die Liste sowohl das Feld "ID" und das Feld "Name" in das Listenfeld aufnehmen, dann in den Eigenschaften die Spaltenbreite für die erste Spalte auf 0 setzen.


----------



## starbug (22. November 2011)

Also ich hab jetzt in der zeilen für die übergeordnete Tabelle ID und Stadt stehen und für
die untergeordnete Stadt und Artikel. Geht aber nicht auch nicht wenn ich die Spaltenbreite
des Kombinationsfelds auf 0 setze.


----------



## tombe (22. November 2011)

Wo hast du die Spalten angegeben, in der Verknüpfung vom Haupt- zum Unterformular? Dann hast du was falsch verstanden.

Du musst die beiden Spalten im Listenfeld angeben.


----------



## starbug (22. November 2011)

Alles klar danke für deine Antwort. Ich werds mir morgen früh auf der Arbeit angucken.


----------



## starbug (23. November 2011)

So da bin ich wieder. Also ich habe ja die Tabelle Stadt die mit meinen Artikeln verknüpft ist. Ich habe also mal auf Formular geklickt und bekomme dann ein Formular der Tabelle werk mit dem Unterformular der Tabelle Artikel. Dann gehe ich auf Steuerelemente und wähle das Kombinationsfeld aus. Dann sage ich dem assitenten das er die Wertw des Kombinationsfeldes aus der Tabelle Stadt nehmen soll und zwar nur die stdt und nicht die ID. Dann stelle ich im Eigenschaftenfenster die des Kombinationfeldes auf 0. Dann erstelle ich die "Verknüpfung von " und " Verknüpfung nach" im Eigenschaftenfeld des Unterformulars. Ja und da taucht dann wohl das Problem auf.


----------



## tombe (23. November 2011)

Lies nochmal was ich oben geschrieben habe!

Du musst *sowohl* das Feld "ID" *als auch* das Feld "Stadt" in die Liste aufnehmen (als erstes Feld die ID).

Dann stellst du die Spaltenbreite z.B. auf "0cm;5cm" ein. Somit sieht man nur den Städtenamen aber die ID ist trotzdem in der Liste enthalten.

Jetzt kannst du den Wert der Liste mit dem Unterformular verknüpfen.

Schau zur Sicherheit bei den Eigenschaften der Liste im Register "Daten". Dort gibt es die Eigenschaft "Gebundene Spalte", hier muss eine 1 drin stehen weil du ja als Wert die ID brauchst.


----------



## starbug (23. November 2011)

Ich weiss nicht aber es will nicht klappen, ich weiss einfach nicht was ich falsch mache. Ich hab mal eine ganz simple Beispile Tabelle angefügt, vielleicht kannst du mir darasn zeigen was da falsch ist.


----------



## tombe (23. November 2011)

Ich bekomme beim Öffnen die Meldung "Datenbank hat ungültiges Format...". Sieht so aus als ob du mit einer aktuelleren Access Version als ich arbeitest (ich habe 2000).

Deshalb hänge ich jetzt mal hier ein Beispiel von mir dran. Es gibt die Tabellen "stadt" und "artikel" die über die Felder "stadt.id" und "artikel.stadt" verknüpft sind.

Dann gibt es das Formular "artikel" in dem die Artikel dargestellt werden und das als Unterformular dient.

So und dann noch das Formular "Formular1". Dieses enthält ein Listenfeld mit allen Städten. Klickt man einen Wert an, werden die Artikel entsprechend gefiltert.

Entweder du versuchst es damit oder du speicherst deine Datenbank im 2000-er Format, dann schau ich mir die mal an.


----------



## starbug (23. November 2011)

Danke für die Antwort. Aber du hast das ja jetzt mit VBA gemacht richtig? Das hatte ich nicht berücksichtigt ich dachte es geht auch ohne aber jetzt weiss ich ja bescheid. Danke.


----------



## starbug (29. November 2011)

Hallo,

also habe jetzt mithilfe des Codes von Tombe mein Kombinationsfeld wunderbar einsetzen können.
Frage: Kann ich jetzt noch ein weiteres Kombinationsfeld einfügen, was meine Tabelle nach
einem anderen Kriterium filtert obwohl der Inhalt des Kobinationsfeldes aus einer anderen 
Tabelle kommt?


----------



## tombe (29. November 2011)

Generell gehen tut das schon, du musst dann halt die Filterbedingungen kombinieren.

Ob der Inhalt der Liste aus einer anderen Tabelle kommt ist nicht wichtig. Entscheidend ist nur das ein Wert geliefert wird der in der Tabelle (die du filtern willst) verarbeitet werden kann.


----------



## starbug (29. November 2011)

Ja und zwar habe ich ja mit deinem Code die Stadt gefiltert. Also wenn in meinem Kombinationsfeld Berlin steht, werden mir Unterformular ja alle Artikel aus Berlin angezeigt. 

Und jetzt mal angenommen ich mache mir noch ein Kombinationsfeld und lese dort alle Artikelnummern
ein. Dann soll bei Auswahl der ArtkelNr. nur dieser eine Artikel (in diesem Fall in Berlin)
angezeigt werden.

```
Private Sub ArtikelSuchen_AfterUpdate()
    Me.Form.Filter = "ArtikelNr.=" & Val(Me.ArtikelSuchen.Value)
    Me.Form.FilterOn = True
End Sub
```

So will das aber nicht wirklich klappen.


----------



## tombe (29. November 2011)

Damit du den Code nur einmal schreiben oder anpassen musst, würde ich die Filterfunktion in eine eigene Prozedur auslagern. Der Aufruf erfolgt dann jeweils über das onClick-Ereignis der entsprechenden Liste.


```
Private Sub Liste_Stadt_onClick ()
'Aufruf der gemeinsamen Filterfunktion
DB_Filter

End Sub

Private Sub Liste_Nummer_onClick ()
'Aufruf der gemeinsamen Filterfunktion
DB_Filter

End Sub

Sub DB_Filter ()

Dim flt As String
flt = ""

If Liste_Stadt.Value <> "Alle" Then
    flt = "stadt = " & Liste_Stadt.Value
End If

If Liste_Nummer.Value <> "Alle" And flt = "" Then
    flt = "nummer = " & Liste_Nummer.Value
ElseIf Liste_Nummer.Value <> "Alle" And flt <> "" Then
    flt = flt & " AND nummer = " & Liste_Nummer.Value
End If

If flt <> "" Then
    Me.Filter = flt
    Me.FilterOn = True
Else
    Me.FilterOn = False
End If

End Sub
```


----------

