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:
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.
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.
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:
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.
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?
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.
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?
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.