PDA

Vollständige Version anzeigen : Mit Kombinationsfeld und Listenfeld Unterformular filtern


arminio298
25.09.2003, 08:50
Guten Morgen,

ich habe folgendes Problem:
Bin noch neu im Umgang mit Access 2000 und möchte ein Formular erstellt mit dem eine Abfrage gefiltert wird. Das Filtern soll zuerst mittels eines Kombinationsfeldes erfolgen, mit diesem der Lieferant ausgewählt werden kann. Folglich soll in dem Listenfeld über Mehrfachauswahl eine oder mehrere Artikel ausgewählt werden können. Und zum Schluss in einem Unterformular die ganze Abfrage mit Planungsdaten, Artikelbeschreibung usw. abgefragt werden.

Vielen DAnk für Eure Hilfe schon im voraus

Gruesse

Armin

Arne Dieckmann
25.09.2003, 08:53
Bei Reinhard Kraasch (Link in meiner Signatur) findest Du eine Beispieldatenbank namens "Suchen: Suchen / SQL dynamisch erstellen", die wohl alle Wünsche erfüllt.
Viel Spass beim Durchwühlen des Codes.

arminio298
25.09.2003, 09:05
Ich kenne dieses Beispiel, jedoch funzt dieses bei mir leider nicht. Das Problem ist, ich bekomme das Unterformular beim Auslösen der Abfrage nicht angezeigt und ich kann nicht den Fahler im Code finden.

Arne Dieckmann
25.09.2003, 09:11
Lade doch mal Deine Datenbank (mit den relevanten Teilen) mit einigen Erläuterungen dazu hier im Forum hoch. So wird es doch etwas zu theoretisch.

arminio298
25.09.2003, 13:07
Den Code, den ich für die dynamische SQL-ERstellung verwendet habe ist folgender (übernommen vom Beispiel v. Kraasch):

Private Sub MakeSQL()
Dim Tmp1 As String, Tmp As String, Itm
Krit = ""
If Not IsNull(Me!Kombinationsfeld0) Then Krit = Krit & " AND Liste2 ='" & Me!Kombinationsfeld0 & "'"
Tmp = ""
For Each Itm In Me!Liste2.ItemsSelected
Tmp = Tmp & ",'" & Me!Liste2.ItemData(Itm) & "'"
Next Itm
If Tmp <> "" Then Krit = Krit & " AND Liste2 IN (" & Mid(Tmp, 2) & ")"
SQL = "SELECT * FROM Cap "
If Krit <> "" Then
Krit = Mid(Krit, 5)
SQL = SQL & "WHERE " & Krit
End If

End Sub

Meines Erachtens kann das PRoblem vielleicht darin liegen, dass CAP eine Union- Abfrage ist. Liste2 ist übrigens ein Listenfeld mit dem man den Lieferanten auswählen kann und Kombinationsfeld 0 auch ein Feld mit dem man mehrere Lieferanten auswählen kann.

Entschuldigt meine begrenzte Kenntnisse in VBA, aber leider stehe ich in diesem Fall immer noch auf dem Schlauch.

Gruesse

Armin

Arne Dieckmann
25.09.2003, 13:12
Wie sieht denn der SQL-String der UNION-Abfrage aus? Auf jeden Fall muss innerhalb dieser UNION-Abfrage die Spalte "Liste2" vorhanden sein, da ja darauf das Kriterium gesetzt wird.

Ob an dieser Stelle:

If Tmp <> "" Then Krit = Krit & " AND Liste2 IN (" & Mid(Tmp, 2) & ")"
AND oder vielleicht doch OR richtig ist, musst Du wissen.

An dieser Stelle:

If Not IsNull(Me!Kombinationsfeld0) Then Krit = Krit & " AND Liste2 ='" & Me!Kombinationsfeld0 & "'"

könnte das AND zuviel sein.


Tipp: Gebe mal den generierten SQL-String mit Debug.print sql aus und teste diesen dann in einer neuen Abfrage.

Arne Dieckmann
25.09.2003, 13:18
Es gilt übrigens immer noch das Angebot, dass Du die Datenbank hier hochladen kannst!

arminio298
25.09.2003, 14:18
Vielen Dank Arne. Es funktioniert. Werde jetzt mal an diesem Code weiterbasteln, da noch mehr Kriterien in diesem Code vorkommen sollen. Mal sehen wie weit ich komme.
Nochmals vielen Dank

Gruesse

Armin

arminio298
25.09.2003, 14:19
.....Das Problem war übrigens, dass das Feld Liste2 nicht in der Abfrage definiert war.