Office: Datumsfilter die 2.

Helfe beim Thema Datumsfilter die 2. in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo nochmal in die Runde *Smilie Ich habe noch immer ein Problem mit meinem Formularfilter. Ich möchte mein Endlosformular nach Datum filtern und... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von TheUnreal, 15. Dezember 2020.

  1. Datumsfilter die 2.


    Hallo nochmal in die Runde *Smilie

    Ich habe noch immer ein Problem mit meinem Formularfilter.

    Ich möchte mein Endlosformular nach Datum filtern und habe mir folgenden Filterstring nach DBWiki gebaut :

    Code:
    Im Grunde ist das Symptom gleichbleibend, egal ob ich Format(Date...) oder Clng(Date...) mache. Der erste Filterdurchlauf gibt das (vorerst) gewünschte Ergebnis

    Ich filtere 01.12.2020 - 01.12.2020
    SQL String "AND Date Out Between 44166 And 44166".

    Ich filtere danach GeraeteTyp
    Geraetetyp Like 'HierstehteinKarton*' AND DateOut 44166 And 1122020

    Bis zum schreiben dieses Beitrages habe ich mich zumindest gefragt, woher die Zahl kommt - es ist 1.12.2020.
    Mache ich o.g. Prozedere mit Format(Date) erhalte ich beim 2. Durchlauf einen Typ 13 Mismatch Error.

    Der Wert im Feld "DateOf" hat sich ja noch nicht geändert? Warum nimmt er im zweiten Durchlauf plötzlich den Zahlenstring von DateOf aber noch immer den Clng(DateIf)?
    Ich verstehe das nicht, kann mir hierbei jemand bitte Unterstützung anbieten?

    Gruß Sascha

    :)
     
    TheUnreal, 15. Dezember 2020
    #1
  2. Hallo Sascha,

    der Wert im Feld hat sich nicht geändert, aber Du machst mit Format eine Zeichenkette daraus, daher der type mismatch. Das ganze Umwandeln des Datums kannst Du Dir sparen, wenn Du das Datum einfach nur SQL-gerecht aufbereitest.

    Gruß
    Fred
     
  3. Hallo Sascha,

    anbei ein Beispiel, wo in Abhängigkeit von zwei Komboboxen ein Filter zusammengesetzt wird.

    Werden für den Zeitraum zwei Textboxen verwendet, wäre das ähnlich wie in dem Beispiel mit den Komboboxen. Zusätzlich müssten allerdings die Eingaben auf ein gültiges Datum geprüft werden und anschließend wird dann, wie gehabt, die Filterbedingung geändert:
    (AirCode):
    Code:
     
    knobbi38, 17. Dezember 2020
    #3
  4. Datumsfilter die 2.

    Hallo Fred, hallo Knobbi,

    danke für eure Antworten. Ich nutze 2 Textfelder im Form die als Date,kurz formatiert sind.Das hätte ich vielleicht früher schreiben sollen?

    Der Aufbau mit entweder Format(...) oder Clng(...) ist direkt aus DonKarl 6.8.

    Ich hänge halt gedanklich daran,dass der SQL String für den Filter beim ersten mal einwandfrei ist und wenn ein Filter zukommt, der Wert im Textfeld "DateOf" unverändert ist. Wenn dieser also zu Clng konvertiert wird, müsste es doch das gleiche Ergebnis geben wie beim ersten Durchlauf?

    An etwas wie Replace/RegEx hab ich auch schon gedacht, aber ehrlich gesagt gefällt mir Clng am besten *Smilie.
    Danke für eure Mühen, ich baue mal nach Knobbis Vorschlag um und melde mich nochmal.
    Gruß Sascha
     
    TheUnreal, 17. Dezember 2020
    #4
  5. Hallo Sacha,

    ich weiß jetzt nicht, wieso du immer wieder cLng() in Verbindung mit Datumswerten in Spiel bringst, das hat doch miteinander nichts zu tun. In dem Codebeispiel siehst du, wie zwei Textfeld ausgelesen, geprüft und in ein SQL-Date konvenvertert werden. Wie das Ausgabeformat der Textfelder definiert ist, sollte dabei keine Rolle spielen, denn es geht um die Eingabe.

    Gruß Ulrich
     
    knobbi38, 18. Dezember 2020
    #5
  6. donkarls Access-Seiten

    Clng(Datum) entspricht übringens der Anzahl Tage nach Tag 1.

    Gruß Sascha
     
    TheUnreal, 20. Dezember 2020
    #6
  7. Hallo Sascha,

    es ist schön, wenn du immer wieder den Link neu präsentierst, aber dadurch wird es auch nicht besser. cLng() hat bei Datumswerten nichts verloren, auch wenn das dort bei Donkarl erwähnt wird.
    Nochmal zur Erinnerung: ein Datumswert wird intern als Double gespeichert. Der Nachkommaanteil sind die Zeitwerte und die Vorkommastellen repräsentieren die Tage, wobei 1 dem 31.12.1899 entspricht.
    Um den Vorkommaanteil, also den Datumswert, zu extrahieren, wird int() verwendet und nicht cLng()!!! Im Gegensatz zu int() rundet cLng() bei der Konvertierung, was man aber im Normalfall nicht haben möchte:
    Code:
    Soviel als kurzen Exkurs, spielt aber hier keine Rolle, weil du für den Filter eine Datumsangabe als String im SQL-Format benötigst, also Format() verwendest.
    Wie du an diesem Beispiel siehst, könnte man auch noch
    Code:
    für die Zusammensetzung des Filters verwenden.

    Gruß Ulrich
     
    knobbi38, 20. Dezember 2020
    #7
  8. Datumsfilter die 2.

    Guten Morgen Ulrich,
    danke, dass du mich nicht aufgibst, mein Ziel ist es doch tatsächlich, das ganze einfach nur zu verstehen *Smilie.

    Weshalb ich auf Clng so gepocht habe? Naja, wenn der Don sagt: "Mach!", dann mach ich.*biggrin.gif* , immerhin weiß ich es nicht besser.

    ̶s̶̶p̶̶a̶̶ß̶̶ ̶̶b̶̶e̶̶i̶̶s̶̶e̶̶i̶̶t̶̶e̶̶.̶̶ ̶̶i̶̶c̶̶h̶̶ ̶̶h̶̶a̶̶b̶̶e̶̶ ̶̶m̶̶i̶̶r̶̶ ̶̶d̶̶e̶̶i̶̶n̶̶e̶̶ ̶̶b̶̶e̶̶i̶̶s̶̶p̶̶i̶̶e̶̶l̶̶ ̶̶m̶̶d̶̶b̶̶ ̶̶a̶̶n̶̶g̶̶e̶̶s̶̶c̶̶h̶̶a̶̶u̶̶t̶̶,̶̶ ̶̶v̶̶e̶̶r̶̶s̶̶t̶̶e̶̶h̶̶e̶̶ ̶̶a̶̶b̶̶e̶̶r̶̶ ̶̶j̶̶e̶̶t̶̶z̶̶t̶̶ ̶̶n̶̶i̶̶c̶̶h̶̶t̶̶ ̶̶m̶̶e̶̶h̶̶r̶̶,̶̶ ̶̶w̶̶a̶̶r̶̶u̶̶m̶̶ ̶̶i̶̶c̶̶h̶̶ ̶̶e̶̶i̶̶n̶̶e̶̶n̶̶ ̶̶t̶̶y̶̶p̶̶ ̶̶m̶̶i̶̶s̶̶m̶̶a̶̶t̶̶c̶̶h̶̶ ̶̶b̶̶e̶̶k̶̶o̶̶m̶̶m̶̶e̶̶,̶̶ ̶̶w̶̶e̶̶n̶̶n̶̶ ̶̶i̶̶c̶̶h̶̶ ̶̶f̶̶o̶̶r̶̶m̶̶a̶̶t̶(̶d̶̶a̶̶t̶̶e̶̶.̶̶.̶̶.̶)̶ ̶̶n̶̶u̶̶t̶̶z̶̶e̶̶.̶

    ̶w̶̶o̶̶ ̶̶i̶̶s̶̶t̶̶ ̶̶d̶̶e̶̶r̶̶ ̶̶u̶̶n̶̶t̶̶e̶̶r̶̶s̶̶c̶̶h̶̶i̶̶e̶̶d̶̶ ̶̶z̶̶w̶̶i̶̶s̶̶c̶̶h̶̶e̶̶n̶
    Code:
    ̶u̶̶n̶̶d̶̶ ̶̶m̶̶e̶̶i̶̶n̶̶e̶̶m̶̶ ̶̶c̶̶o̶̶d̶̶e̶̶ ̶̶:̶
    Code:
    Update zu o.g.: Ich habe die Variable falsch deklariert. Kann dann natürlich nicht gehen.


    Hmm....ich glaube, ich habe es jetzt verstanden. Ich werde meinen Filter an den Beispielfilter anpassen, denn wenn ich die Filterstrings vergleiche,
    Code:
    Nun bekomme ich den Fehler 2001, die vorherige Aktion wurde abgebrochen. Mein SQL stimmt also nicht *frown.gif*
    Ich schaue mir mal die beiden SQL Strings im debug an. Aktuell behaupte ich noch, dass es identisch sein sollte.

    Gruß Sascha
     
    TheUnreal, 20. Dezember 2020
    #8
  9. Hallo Sascha,

    der SQL-String ist nicht richtig, weil nur Stringwerte in Hochkomma einzuschließen sind, du aber hier mit Datumswerten arbeitest. Dafür wird das Literalzeichen '#' verwendet.

    Zur Vereinfachung dieses Problems und der Übersichtlichkeit halber, nehme ich einen syntaktisch richtigen SQL-String und ersetze die variablen Werte dann einfach durch "Platzhalter" der Art "{x}". Anschließend werden diese dann einfach per Replace ersetzt. Das erspart mir die unübersichtlichen Stringverkettungen.

    Gruß Ulrich
     
    knobbi38, 20. Dezember 2020
    #9
  10. Das oben selbst das "Between" bei Codewiederholung verschwinden soll, wäre für mich ein Grund, die Accessinstallation oder gleich den ganzen Rechner in die Tonne zu werfen.

    Ich selber halte von Aktionen wie CLng oder Int weniger, schon wegen des Gewöhnungseffektes. Es soll ja DBMS geben, wo der Tag 0 ein anderer als der 30.12.1899 ist.

    Ich halte viel von ganz einfacher und unmittelbarer Formatierung:
    Code:
    Die Maskierung von Zeichen mit dem Backslash scheint manchmal übertrieben, manchmal aber auch sehr befreiend von überraschenden Fehlern.
    Ansonsten tut sich derzeit Merkwürdiges - das war nicht immer so. Beispiel:
    Code:
    Bei dem Prozess "ich habe verstanden" sollte man die Erkenntnis verinnerlicht haben, dass Text/String in VBA und in SQL etwas unterschiedlich sind.
    Eine SQL-Anweisung bzw. als Teil davon ein Filter sind in VBA vor der Ausführung nur schlichter Text, den man verschiedentlich zusammensetzen kann, z.B. aus Einzel-Textelementen. Dabei muss man die Verwendung solcher Zeichen wie &, "", ' nicht übertreiben, wegen der Übersicht.

    Ein Text im SQL-Kontext wäre dann in Quotes/DoubleQuotes einzuschließen. Ein Datum ist dort aber kein Text, sondern eben datum.
     
  11. Hallo,

    hier ist nochmal schön beschrieben, worin das eigentliche Problem mit between besteht. Kann man auch sehr schnell selber mal mit einer kleinen DB nachvollziehen. Je nachdem, welche Datumswerte zu verarbeiten sind, kann es zu Problemen dadurch kommen, daß between bei reinen Datumswerten automatisch einen Zeitwert von 00:00:00 hinzufügt und auf >= bzw. 2 erwartet?

    SELECT id, testdate
    FROM Tabelle1
    WHERE Testdate Between #8/23/2017# And #8/24/2017#

    Liefert ID 1,2,3,4 -> 5 erwartet?

    SELECT id, testdate
    FROM Tabelle1
    WHERE [testdate] >= #8/23/2017# and [testdate] < #8/24/2017#

    Liefert ID 1,2,3

    Alternativ:
    SELECT id, testdate
    FROM Tabelle1
    WHERE int(Testdate) Between #8/23/2017# And #8/24/2017#

    Liefert 1,2,3,4,5[/quote] siehe auch:
    https://codekabinett.com/rdumps.php?...ype-vba-access

    Deshalb besser die Schreibweise mit:
    [testdate] >= #8/23/2017# and [testdate] < #8/24/2017#
    Da ist das Ergebnis immer gleich offensichtlich und meistens auch das gewünschte.

    Gruß Ulrich
     
  12. Danke, danke, und nochmals danke.

    @ebs, ja, ich habe anscheinend einen kapitalen Fehler im Startpost, das "between" verschwindet nicht.
    Ich denke, ich werde mir SQL ist leicht mal antun, schlimmer kann es bei mir ja nicht werd *Smilie.

    @Ulrich

    Danke, dass du dir die Mühe gemacht hast. Wenn du kein Urheberrecht auf die SQL Bauweise hast, würde ich mir die für zukünftige Projekte aneignen.
    Allerdings,wie man am Datum erkennt, fehlt mir da noch Grundwissen.

    Ich wünsche euch eine schöne Weihnachtszeit.
    Bleibt gesund!
     
    TheUnreal, 21. Dezember 2020
    #12
  13. Datumsfilter die 2.

    Hallo Sascha,

    nein, das Beispiel ist frei und darf von jedem verwendet werden.

    Der Umgang mit SQL-Strings bzw. das Zusammensetzen wird dadurch vielleicht etwas einfacher und ingesamt etwas besser lesbar.

    Gruß Ulrich
     
Thema:

Datumsfilter die 2.

Die Seite wird geladen...
  1. Datumsfilter die 2. - Similar Threads - Datumsfilter

  2. Datumsfilter funktioniert nicht

    in Microsoft Excel Hilfe
    Datumsfilter funktioniert nicht: Hi, ich habe ein Problem mit einem Datumsfilter. Ich würde gerne in zwei Textboxen den Datumsbereich zum Filtern festlegen. Das funktioniert soweit. Leider filtert er alle Einträge weg und ich...
  3. Datumsfilter: heute oder älter anzeigen

    in Microsoft Excel Hilfe
    Datumsfilter: heute oder älter anzeigen: Hi, ich habe in Excel 2010 eine SQL Datenbank ausgelesen die sich ständig vom Inhalt her ändert. In der Spalte AY steht das Datum der jeweiligen Zeile. Ich möchte alle Zeilen anzeigen, die von...
  4. Datumsfilter mit VBA in Pivot (Zellbezug)

    in Microsoft Excel Hilfe
    Datumsfilter mit VBA in Pivot (Zellbezug): Hallo alle miteinander, ich habe probiert und probiert und komme leider nicht am Ziel an. Grundlage: -alle Daten (sowohl die Daten für die Filterung als auch die Pivot) befinden sich in einem...
  5. Abfrage mit Datumsfilter

    in Microsoft Access Hilfe
    Abfrage mit Datumsfilter: Hallo zusammen Ich habe eine Tabelle die folgendermassen aufgebaut ist: -Objekt-ID (Eindeutige ID, jedes Objekt kommt nur einmal vor) -Eigentümernummer Alt (alter Besitzer des Objekts)...
  6. Datumsfilter von Formular an Abfrage übergeben

    in Microsoft Access Hilfe
    Datumsfilter von Formular an Abfrage übergeben: Hallo liebe Community! Ich muss euch erstmal meinen riesen Respekt zum Ausdruck bringen, was ihr hier teilweise so auf dem Kasten habt! Ich werde mittlerweile fast wahnsinnig *confused.gif* Ich...
  7. Datum zu Datum ändern und Filter setzen

    in Microsoft Excel Hilfe
    Datum zu Datum ändern und Filter setzen: Hallo zusammen, ich bin nun echt langsam am verzweifeln. Zunächst möchte mein Datum sich nicht zu einem offiziellem Datum ändern und ich vermute nun auch deshalb wird der Filter nicht...
  8. Datumsfilter doppelt

    in Microsoft Excel Hilfe
    Datumsfilter doppelt: Hallo, Ich kämpfe mit einem merkwürdigen Problem. In einer Tabelle sind Personen und Aktivitäten aufgelistet. Enthalten ist auch ein Spalte mit dem Datum der Aktivität. Eingefüllt sind ca. 900...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden