Listenfeld filtern und sortieren

Liebe Wissende,

ich bin einmal wieder ratlos. Ich habe bei mir ein Listenfeld (Liste0), in dem ich sowohl durch eine Eingabe in ein Textfeld ((Text24 bzw. Text27)sortieren als auch durch einen Klick nach verschiedenen Spalten sortieren möchte.

Das filtern klappt ganz gut; Ich habe dem Listenfeld eine Abfrage zugrundegelegt, das in den Kriterien

wie Wenn([formulare]![Startmenü]![Text27] Ist Null;"*";[Formulare]![Startmenü]![Text27])

auf die beiden Textfelder Bezug nimmt und per Schaltfläche dann mit

Me.Liste0.Requery

aktualisiert wird.

Soweit, so gut.

Jetzt habe ich für das Sortieren einen VBA-Code mir zusammengebaut:

Private Sub Befehl29_Click()
Dim strSQL As String

strSQL = "SELECT Mängel.ID, Mängel.Bericht, Mängel.Berichtsnummer, Mängel.Titel, Mängel.[verantwortlich für Umsetzung], Mängel.[Fristvorschlag FSH], Mängel.Status "
strSQL = strSQL & "FROM Mängel "
strSQL = strSQL & "where Mängel.[ID] >0 "

If Len(Me.Text24) > 0 Then
strSQL = strSQL & " and (Mängel.[verantwortlich für Umsetzung] = ([Formulare]![Startmenü]![Text24]"
End If

If Len(Me.Text27) > 0 Then
strSQL = strSQL & " and (Mängel.[status] = ([Formulare]![Startmenü]![Text27]"
End If

strSQL = strSQL & „ORDER BY Mängel.ID“

Me.Liste0.RowSource = strSQL
Me.Liste0.Requery
End Sub

Hier soll also sowohl gefiltert werden als auch sortiert. Das Ergebnis ist jedoch: Wenn ein Textfeld leer ist und ich dann den VBA-Code aktiviere, klappt es. Wenn ich jedoch einen Filter in das Textfeld setze zeigt das Listenfeld nach Durchlauf des Codes keine Inhalte mehr an. Seltsamerweise bringt nach diesem Durchlaufen des Codes (vorher klappt es zuverlässig) dann auch die Aktualisieren-Funktion mit „Me.Liste0.Requery“ keine Ergebnisse mehr, egal ob ich die Filter dann lösche oder ändere.

Weiss jemand Rat?

Herzlichen Dank!

fshbb

Hallo,

If Len(Me.Text24) > 0 Then
strSQL = strSQL & " and (Mängel.[verantwortlich für Umsetzung]
= ([Formulare]![Startmenü]![Text24]"
End If

ist „Mängel.[verantwortlich für Umsetzung]“ bzw. „Mängel.[status]“ ein Text oder eine Zahl?
Wenn Text, muss das in einfache Hochkommas eingeschlossen werden.

strSQL = strSQL & „ORDER BY Mängel.ID“

hier fehlt wahrscheinlich dann ein Leerzeichen vor „ORDER“, da dies in deinem obigen Filter fehlt. Außerdem hast du eine öffnende, aber keine schließenden Klammern.

Grundsätzliches: Benenne deine Textboxen und Buttons! Dein Code wird unwartbar, da du selber schon bald nicht mehr weißt, was in TEXT24 steht.

Beim Zusammenbasteln von SQL Queries hilft, den String einfach mal mit „Debug.print strSQL“ an der Konsole auszugeben.
Meist sieht man dann selber was nicht funktioniert.

Gruss
Joey

Oh - Danke! Es sind alles Textfelder. Muß es dann heißen:

strSQL = strSQL & " and ‚Mängel.[verantwortlich für Umsetzung]‘ = ‚[Formulare]![Startmenü]![Text24]‘"

???

Mit herzlichem Dank!

fshbb

nicht ganz:

strSQL = strSQL & " and Mängel.[verantwortlich für
Umsetzung] = '[Formulare]![Startmenü]![Text24]'"

Herzlichen Dank - das Problem besteht weiter…
Ganz lieben Dank schon einmal!

Ich habe den Code jetzt wie folgt abgeändert:

Private Sub Befehl34_Click()
Dim strSQL As String

strSQL = "SELECT Mängel.ID, Mängel.Bericht, Mängel.Berichtsnummer, Mängel.Titel, Mängel.[verantwortlich für Umsetzung], Mängel.[Fristvorschlag FSH], Mängel.Status "
strSQL = strSQL & "FROM Mängel "
strSQL = strSQL & "where Mängel.[ID] >0 "

If Len(Me.Text24) > 0 Then
strSQL = strSQL & " and Mängel.[verantwortlich für Umsetzung] = ‚[Formulare]![Startmenü]![Text24]‘"
End If

If Len(Me.Text27) > 0 Then
strSQL = strSQL & " and Mängel.[status] = ‚[Formulare]![Startmenü]![Text27]‘"
End If

If Len(Me.Text32) > 0 Then
strSQL = strSQL & " and Mängel.[Bericht] = ‚[Formulare]![Startmenü]![Text32]‘"
End If

strSQL = strSQL & " ORDER BY Mängel.[Fristvorschlag FSH]"

Liste0.RowSource = strSQL
Liste0.Requery
End Sub

Die Probleme sind jedoch geblieben:

  1. Nachdem ich diesen Code (Sortieren) habe laufen habe, funktioniert das Filtern über Me.Liste0.Requery nicht mehr. Als wäre das Listenfeld eingefroren. Und zwar auch, wenn ich ein paar funktionierende Sortierungen haben machen lassen! Die Abfrage für das Listenfeld liefert Ergebnisse, das Listenfeld ändert sie aber nicht mehr ab. Das macht mir am meisten Kopfschmerzen.

  2. Wird in dem Textfeld ein Filter eingesetzt, klappt das Sortieren nicht mehr. Es werden keine Ergebnisse angezeigt (Und danach kann ich auch nicht mehr, siehe 1.), über me.Liste0.requery neue Filter setzen)!

Ich habe übrigens Access 2010. Hast Do (oder andere patente Mitleser) noch eine Idee?

Mit besten Grüßen,
fshbb

Hi,
versuche mal den Code mit den PRE Tags einzuschließen, dann wird es besser lesbar.

Das

If Len(Me.Text24) > 0 Then
strSQL = strSQL & " and Mängel.[verantwortlich für Umsetzung]
= ‚[Formulare]![Startmenü]![Text24]‘"
End If

muss so geschrieben werden, da die Auswertung deines Text24 Begriffen nicht innerhalb eines definierten Strings erfolgen kann.

If Len(Me.Text24) \> 0 Then
strSQL = strSQL & " and Mängel.[verantwortlich für Umsetzung]='"&[Formulare]![Startmenü]![Text24]& "'"
End If

Wenn das alles im gleichen Formular sich befindet, kann man anstatt [Formulare]![Startmenü]![Text24] auch Me![Text24] schreiben. Macht es wieder übersichtlicher.

Nochmals: gib den Inhalt von strSQL mit Debug.Print oder meinetwegen mit Messagebox mal aus. Wenn du auch nur ein wenig von SQL verstehst, siehst du dann selber wenn etwas falsch zusammengebastelt ist. Weiterhin kann man sich den SQL String dann mal raus kopieren und direkt auf der Datenbank testen.

Gruss
Joey

Laufzeitfehler 2465
Gut, danke! Jetzt kommt nur noch eine Meldung „Laufzeitfehler 2465 - Microsoft Access kann das in Ihrem Ausdruck angegebene Feld ‚I1‘ nicht finden.“ (wobei der Buchstabe I ein senkrechter Srtich sein soll. Hilft Das Dir weiter?

MfG,

fshbb

HAllo,

poste nochmal den Code…

wobei statt
[Formulare]!..
unbedingt
[Forms]!..

geschrieben werden muss.

Das Überprüfen eines Textfeldes auf „leer“ geschieht auch besser so:

If nz(Me!Textfeld,"") ="" Then

oder

If Len(nz(Me!Textfeld,"")) = 0 Then

Invertiert geht es noch einfacher:

If Len(nz(Me!Textfeld,"")) > 0 Then strsql=strSQL & " and FeldXY > 10"

Viele Grüße vom Bodensee
Franz, DF6GL

Laufzeitfehler 2465
Ach so,

von Interesse ist vmtl auch, dass der Debugger die Zeile

strSQL = strSQL & " and Mängel.[verantwortlich für Umsetzung]=’" & [formulare]![startmenü]![Text24] & „’“

markiert.

Hast Du das „Überwachungsfenster“ gemeint mit der Beobachtung des Codes?

MfG,

fshbb

Juchhu!
Danke,

das war die mal wieder simple Lösung. Ich bitte um Verzeihung, ich gehöre wohl zu denen, die wunderbar sich eine Doktorarbeit aus dem Internet zusammenkopieren können, jedoch nichts vom tieferen Sinn verstehen.

Herzlichen Dank und Grüße an Euch!

MfG,

fshbb