Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Einträge in einem Endlosformular in Datumsbereich/Wertebereich filtern

Begonnen von Kannkaumvba, Oktober 17, 2015, 13:27:25

⏪ vorheriges - nächstes ⏩

Kannkaumvba

Hallo Forum,

in einem Endlosformular sollen Einträge nach dem Feld [AktDueDat] in einem Datumsbereich gefiltert werden. Der Bereich wird über die ungebundenen Felder [DatumFilterVon] und [DatumFilterBis] definiert:

Private Sub FilterSetzen()

Dim ctl           As Control
Dim strFilter     As String
Set ctl = Me.ActiveControl

If ctl.Name = "DatumFilterVon" Then
   If Len(Me!DatumFilterVon.Text & vbNullString) > 0 Then strFilter = strFilter & " AND AktDueDat between " & Format((Me!DatumFilterVon), Date, "\#yyyy-mm-dd\#") & " and " & Format((Me!DatumFilterBis), Date, "\#yyyy-mm-dd\#")
Else
   If Not IsNull(Me!DatumFilterVon.Value) Then strFilter = strFilter & " AND AktDueDat between " & Format((Me!DatumFilterVon), Date, "\#yyyy-mm-dd\#") & " and " & Format((Me!DatumFilterBis), Date, "\#yyyy-mm-dd\#")
End If

strFilter = Mid(strFilter, 6)

Me.Filter = strFilter
Me.FilterOn = True

ctl.SetFocus

ctl.SelStart = Len("" & ctl)

Set ctl = Nothing

End Sub


Der Filter wird nach Aktualisierung des ungebundenen Feldes angeprochen, z.B:

Private Sub DatumFilterVon_AfterUpdate()
Call FilterSetzen
End Sub


Der Filter funktioniert nicht und liefert mir den Laufzeitfehler "Typen unverträglich".

Darüber hinaus wüsste ich in diesem Zusammenhang auch noch nicht, wie der Filter zu setzen ist, wenn erst beide Felder belegt sind bzw. wie eine Prüfung eingestellt werden kann, dass DatumFilterVon kleiner als DatumFilterBis sein muss.

Die gleiche Vorgehensweise möchte ich noch zum Filtern ganzer Zahlen in einem Wertebereich einsetzen.

Vielleicht kann mir da jemand helfen.

Vielen Dank!!!

DF6GL

Hallo,

Löse die Filterung beim Klicken einer Schaltfläche (oder nach Aktualisierung von "DatumFilterBis") aus:

Sub DatumFilterBis_Afterupdate()

Me.Filter = "AktDueDat between " & Format(nz(Me!DatumFilterVon, Date), "\#yyyy-mm-dd\#") & " and " & Format(nz(Me!DatumFilterBis, Date), "\#yyyy-mm-dd\#")
Me.FilterOn = True

End Sub

Kannkaumvba

Hallo und vielen Dank, das klappt,

für das Filtern ganzer Zahlen bekomme ich das so aber nicht hin:

Private Sub DurchfuehrungFilterBis_AfterUpdate()
Me.Filter = "AktPlan between " & Nz(Me!DurchfuehrungVon, ) & " and " & Nz(Me!DurchfuehrungBis, )
Me.FilterOn = True
End Sub


Ich weiss leider nicht, was für value_if_null in diesem Fall anzugeben ist. Wie könnte man dieses Problem lösen?

Beim weiteren "herumtüfteln" mit den Filtern ist folgender Fehler eingetreten:

Wird ein Filter (Feld) so gesetzt, dass keine Einträge vorhanden sind, wird bei Änderung des Feldes dieser Fehler angezeigt:

Laufzeitfehler 2185: Sie können auf die Eigenschaften oder Methoden eines Steuerelementes nur verweisen, wenn das Steuerelement den Fokus hat.

Noch eine Frage am Rande: Kann man den SQL-Abfrage-Generator so einstellen, dass man aus einer Abfrage keine Duplikate angezeigt bekommt? Die ungebunden Felder zum filtern beziehen als Kombifelder ihre Einträge daraus. An bestimmten Stellen will ich zum Filtern nur die vorliegenden Einträge und nicht alle möglichen anbieten.

Vielen Dank im Voraus!!!

MzKlMu

Hallo,
zeige Deine Tüfteleien, wie sonst soll man einen Fehler finden ?
ZitatKann man den SQL-Abfrage-Generator so einstellen, dass man aus einer Abfrage keine Duplikate angezeigt bekommt?
Ja, kannst Du in den Eigenschaften direkt einstellen (Keine Duplikate). Was wird denn da zur Auswahl mit den Kombis angeboten ?
Gruß Klaus

Kannkaumvba

Hallo MzKlMu,

welche Information soll ich Dir bieten können, ausser dass ich in den Einstellungen des SQL-Abfrage-Generators gesucht habe, um Duplikate auszublenden.

Auch in den Eigenschaften des Steuerelements habe ich nicht die Möglichkeit gefunden Duplikate auszublenden einzustellen.

Gruss

DF6GL

Hallo,


schreibe zunächst in JEDES Modul  am Anfang
Option Explicit
hinzu (falls noch nicht geschehen) und kompiliere die DB im VBA-Editor.



ZitatLaufzeitfehler 2185: Sie können auf die ...

Das passiert, wenn auf die "Text"-Eigenschaft eines Textfeldes zurückgegriffen wird, das Textfeld zu diesem Zeitpunkt aber nicht den Fokus besitzt. Das kommt aber beim aktuellen Code nicht vor.

Private Sub DurchfuehrungFilterBis_AfterUpdate()
Me.Filter = "AktPlan between " & Nz(Me!DurchfuehrungVon,0 ) & " and " & Nz(Me!DurchfuehrungBis, 0
Me.FilterOn = True
End Sub


Was ist "DurchfuehrungFilterBis" ?   Das sollte eher "DurchfuehrungBis"   (AfterUpdate-Prozedur für das Textfeld "DurchfuehrungBis") lauten.


ZitatKann man den SQL-Abfrage-Generator so einstellen, dass man aus einer Abfrage keine Duplikate angezeigt bekommt?

In den Abfrageeigenschaften gibt es dafür die Einstellungen bei "Keine Duplikate" bzw. "Eindeutige Datensätze"

Kannkaumvba

Hallo DF6GL,

Wertefilter klappt, Danke! Hatte einen kleinen Fehler im Feldnamen, sorry!

Ich verwende mehrere Filter, die zusammen arbeiten sollen. Mit der FliterSetzen()-Routine funktioniert das. Allerdings mit dem beschriebenen Laufzeitfehler.

Mit der Me.Filter-Funktion arbeiten die Filter einzeln. Oder gibt es eine Möglichkeit die zu verknüpfen?

Thema Duplikate: Die Abfrage zeigt eindeutige Datensätze an. In dem Feld, nachdem gefiltert werden soll, können Einträge jedoch mehrfach vorkommen. Entweder ich filtere nach der Datensatzquelle, die schon in die Abfrage eingegangen ist, dann biete ich mehr Einträge an als evtl. in den Feldern vorhanden sind, oder ich biete nur die Einträge an, die über die Abfrage angezeigt wird. Dann muss ich ich ja im Kombinationsfeld des Formulars über das gefiltert wird eine Einstellung zu Duplikaten machen können. Finde ich aber nicht!

Danke und Gruss

MzKlMu

Hallo,
ZitatMit der FliterSetzen()-Routine funktioniert das. Allerdings mit dem beschriebenen Laufzeitfehler.
Und nach dieser FilterSetzen()-Routine hatte ich gefragt.
ZitatOder gibt es eine Möglichkeit die zu verknüpfen?
natürlich kannst Du verknüpfen. Die Filterbedingung entspricht exakt einer Where Klausel wie in einer Abfrage nur ohne das Schlüsselwort Where. Und das kannst Du nach den gleichen Regeln mit AND und/oder OR verknüpfen.
Zitat.. wird eine Einstellung zu Duplikaten machen können. Finde ich aber nicht!
gibt es auch nicht. Nur die Datenherkunft (Select ....) kennt diese Einstellung. In SQL ist das SELECT DISTINCT .....
Gruß Klaus

Kannkaumvba

Hallo,

dann steckt in diesem Code sicherlich ein Fehler bzgl. Sonderzeichen:

Private Sub ProjektFilter_AfterUpdate()
'Call FilterSetzen
Me.Filter = "ProjName = '" & Me!ProjektFilter & "'" And "AktCAPA = '" & Me!CAPAFilter & "'"
Me.FilterOn = True
End Sub


Thema Kombinationsfeld: Ich habe aus der Abfrage das entsprechende Feld für den Filter in einer separaten Abfrage rausgefiltert und die als Datensatzquelle verwendet. Funktioniert.

Gruss

MzKlMu

Hallo,
Du musst richtig zusammensetzen:
Me.Filter = "ProjName = '" & Me!ProjektFilter & "' And AktCAPA = '" & Me!CAPAFilter & "'"
Zur Fehlersuche kann man sich den Filterstring im Direktbereich ausgeben lassen.
Einfach mal nach Me.Filter diese beiden Zeilen ergänzen:
Debug.Print Me.Filter
Stop

Dann vergleichst Du mal Deine Version und meine. Dann die beiden Zeilen wieder löschen.
Gruß Klaus

Kannkaumvba

Hallo Klaus,

habe ich gemacht:

Private Sub ProjektFilter_AfterUpdate()
'Call FilterSetzen
Me.Filter = "ProjName = '" & Me!ProjektFilter & "'And AktCAPA = '" & Me!CAPAFilter & "'"
Debug.Print Me.Filter
Stop
Me.FilterOn = True
End Sub


Keine Anzeige im Direktbereich, Laufzeitfehler Datentypenkonflikt im Kriterienausdruck

Gruss

MzKlMu

Hallo,
welche Datentypen (in der Tabelle nachsehen) sind denn ProjName und AktCAPA ?
Sind das Nachschlagefelder in der Tabelle ?
Gruß Klaus

Kannkaumvba

Hallo,

ProjName, Format Text
AktCAPA, Format Zahl

Beides keine Nachschlagfelder in Tabelle.

Gruss

MzKlMu

Hallo,
bei Zahlen müssen die Hochkomma weg.

Me.Filter = "ProjName = '" & Me!ProjektFilter & "'And AktCAPA = " & Me!CAPAFilter
Gruß Klaus

Kannkaumvba