PDA

Vollständige Version anzeigen : Filter


doctorrabbit
22.03.2004, 13:22
Hallo,

ich möchte mit der Filter-funktion, die in Access integriert ist, meine Tabelle filtern, und zwar so, dass man nach mehreren Spalten filtert.

meine Tabelle besteht aus 96 Spalten. Alles Booleanwerte, außer das Bezeichnungs und ID Feld.

Der Filter von Access kann sowas schon, aber leider immer nur für eine Spalte. Ich meine, der Filter gibt mir alle Datensätze aus, wo in der betr. Zeile der Wert = True ist.

Der Filter soll aber z.B alle datensätze anzeigen, wo in Spalte A, E, F, Z der Wert = true ist.

Geht sowas?

Ich bedanke mich schonmal im vorraus für eure Hilfe.

J_Eilers
22.03.2004, 13:27
Hi,

ja das geht. Ich frage mal nicht warum du 94 Felder mit Checkboxen hast. Wie soll der Aufruf sein? Genereller Code sieht so aus:

Me.Filter = "F = True"
Me.FilterOn = True

doctorrabbit
22.03.2004, 13:32
Hi danke für die schnelle Hilfe.

ich probiere das mal gleich aus...

doctorrabbit
22.03.2004, 13:44
Hi J_Eilers,

ich habe das mal ausprobiert,

Me.Filter = "Absperrventil = True"
Me.Filter = "Dreiwege-Ventil = True"
Me.FilterOn = True

leider erscheint immer ein Dialog Parameterwert eingeben Dreiwege-Ventil:
Der Code ohne Me.Filter = "Dreiwege-Ventil = True" functioniert einwandfrei.


Was habe ich falsch gemacht?

Arne Dieckmann
22.03.2004, 13:46
Da Du Sonderzeichen verwendest (-), musst Du den Feldnamen in eckige Klammern setzen und dann brauchst Du wohl eher so etwas:


Me.Filter = "Absperrventil = True And [Dreiwege-Ventil] = True"
Me.FilterOn = True

doctorrabbit
22.03.2004, 14:17
Hi Arne Dieckmann,

erstmal Danke für DEine Hilfe. Es funzt.. :)

Ich habe aber leider immer noch einpaar Frage aufm Herzen.

1. kann man im Formular fragen ob und wieviele Checkboxen aktiviert worden sind, wenn ja wie?

2. kann man alle Checkboxen in einem Befehl sofort deaktivieren?

3. Angenommen es wurden 2 Checkboxen aktiviert, wie bekomme ich deren Name in ein Dynamisches Array?

Vielleicht so?
z.B

dim test as variant
test = array(...)

If Me!Absperrventil = True Then
test = Absperrventil
elseif [Dreiwege-Ventil] = True then
test = Dreiwege-Ventil
End If
me.filters = "test[0] = true AND test[1] = true"


Wie bekomme ich so ein Dynamisches Array hin?

ich bedanke mich schonmal im vorraus für Eure Hilfe...

Arne Dieckmann
22.03.2004, 14:36
Ich denke, Deine Fragen kommen daher, weil Du mittels Array den Filter anlegen willst. Das sollte auch so gehen:

Dim ctl As Control
Dim strFilt As String

'Voraussetzung: Die Kontrollkästchen wurden
'so benannt, dass sie auch für den Filter
'eingesetzt werden können:

For Each ctl In Me.Controls
With ctl
If .ControlType = acCheckBox Then
If .Value = True Then strFilt = strFilt & " AND [" & .Name & "]=True"
End If
End With
Next ctl

If Len(strFilt) > 4 Then
' "führendes" AND entfernen:
strFilt = Mid(strFilt, 5)
End If

Debug.Print strFilt
Me.Filter = strFilt
Me.FilterOn = True



Das Löschen aller Checkboxen müsstest Du eigentlich jetzt selbst hinbekommen.

doctorrabbit
23.03.2004, 07:49
Hi Arne Dieckmann,

vielen Dank für Deine schnelle Hilfe. Es funzt jetzt :)

Das löschen der Checkboxen habe ich dank Deiner Hilfe hinbekommen.

Wünsche Dir und allen Forum-User eine angenehme Arbeitswoche.

Viele liebe grüße