August 13, 2022, 21:26:11

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Bericht nach Datum gefiltert solange Datum im Datensatz nicht leer ist

Begonnen von hordesprime, Dezember 18, 2021, 22:00:37

⏪ vorheriges - nächstes ⏩

hordesprime

Tach zusammen,

ich habe ein kleines Problem und sehe den Wald vor lauter Bäumen nicht. Ich habe ein ungebundenes Formular mit einem ungebundenen Textfeld (txt_datumbis)
Ich möchte mit Hilfe einer Schaltfläche einen Bericht öffnen und darin gefiltert alle Datensätze anzeigen lassen bei denen das Feld proj_Ende <= dem ungebunden Datumsfeld (txt_datumbis) ist.'   Hierbei ist zu beachten, dass es auch vorkommen kann, dass im Datensatz das Feld proj_Ende nicht efüllt ist, diese Datensätze sollen nicht mit angezeigt werden. Des Weiteren sollen auch nur
Datensätze angezeigt werden die über folgende Stati verfügen.
Nebenbei ich bin in Sachen VBA sehr unerfahren, daher sorry falls es wirklich nur ne Kleinigkeit ist.
Hier mal mein bisher verwendeter Code

Private Sub btn_bericht_datum_Click()
If Nz(Me.text_datumbis, "") = "" Then
        MsgBox "Es wurde kein Datum eingegeben!"
        Exit Sub
    Else
    DoCmd.OpenReport "ber_proj_filter", acViewPreview, , _
                  "[proj_Ende] <= " & Format(Me!text_datumbis, "\#yyyy\-mm\-dd\#") _
                  & "and [proj_status]= 'läuft'" _
                  & "or [proj_status]= 'geplant'" _
                  & "or [proj_status]= 'ruht'", , "Projekte bis " & Me!text_datumbis
    End If
 End Sub

Schon mal Danke
TC

DF6GL

Hallo,

versuch es so:

Private Sub btn_bericht_datum_Click()
If Isnull(Me!text_datumbis)  or Not Isdate(Me!text_datumbis)  Then
        MsgBox "Es wurde kein Datum eingegeben!"
        Exit Sub
Else
    DoCmd.OpenReport "ber_proj_filter", acViewPreview, , _
                  "[proj_Ende] <= " & Format(Me!text_datumbis, "\#yyyy\-mm\-dd\#") _
                  & " and ([proj_status]= 'läuft' " _
                  & " or [proj_status]= 'geplant' " _
                  & " or [proj_status]= 'ruht')", , "Projekte bis " & Me!text_datumbis
    End If
 End Sub


Beachte die Klammern und die Leerzeichen!

Es wäre zudem besser, die Status-Werte in eine separate Tabelle auszulagern und  den Primärschlüssel in tbl_Projekte(?) abzulegen.  (--> Normalisierung)

markus888

Zitat von: hordesprime am Dezember 18, 2021, 22:00:37Private Sub btn_bericht_datum_Click()
If Nz(Me.text_datumbis, "") = "" Then
        MsgBox "Es wurde kein Datum eingegeben!"
        Exit Sub
    Else
    DoCmd.OpenReport "ber_proj_filter", acViewPreview, , _
                  "[proj_Ende] <= " & Format(Me!text_datumbis, "\#yyyy\-mm\-dd\#") _
                  & "and [proj_status] IN('läuft', 'geplant', 'ruht')", , "Projekte bis " & Me!text_datumbis
    End If
 End Sub


Das Problem ist wohl das fehlende Verständnis für den Operator Vorrang in der SQL Where Bedingung.
Hier gibts Grundlagen dazu:
https://www.datenbanken-verstehen.de/sql-tutorial/sql-and-or-operatoren/
10 Jahre Access

hordesprime

Hiho, erstmal einen schönen 4. Advent alle zusammen...

Die DB ist normalisiert, ich habe jedoch in der Abfrage auf die der Bericht basiert auch das entsprechende TextFeld eingebunden und lasse dies im Bericht anzeigen.

@DF6GL, ich glaube wir reden gerade an ein ander vorbei. Erstmal danke für den Tip mit isnull etc, aber ich bräuchte die Info, wie ich, wenn das gebundene Feld im Bericht (proj_ende), so als "filter" mit angebe, da dieses leer sein kann, aber dann diese Datensätze nicht angezeigt werden dürfen. Nicht das ungebundene Feld text_datumbis, dieses ist nur dafür da, bis zu welchem Datum die laufenden Projekte angezeigt werden sollen.

Keine Ahnung ob ich das entsprechend ausdrücken konnte eas ich benötige. Hope so.

Danke euch
TC


hordesprime

Ups Nachtrag sry..

Er zeigt mir halt leider immer noch im Bericht auch die Projekte an, bei denen das Feld Proj_ende leer ist.


TC


DF6GL

Hallo,

ich (wir) verstehe(n) schon.:


Es sollen alle DS angezeigt werden, deren Datum im Feld " Proj_ende" kleiner gleich dem eingegebenen Datum ist und bei denen das Status-Feld einen der angegebenen Werte besitzt.

Dann zeige nochmal den aktuellen Code und auch den SQL-String der Berichtsabfrage.

Bei den vorgeschlagenen Where-Conditions werden dieenigen  DS nicht angezeigt, bei denen das Tabellenfeld "Proj_ende" leer (NULL) ist.

Welchen Datentyp hat das Tabellenfeld  "Proj_ende" ?

hordesprime

Das Tabellenfeld proj_ende ist als datum typisiert.

den rest kann ich gerade nicht erbringen bin derzeit nicht zu Hause. Mache ich sobald ich wieder zu Hause bin.

Schönen Abend euch noch...
TC

hordesprime

SO habe jetzt noch mal alles neu rein kopiert und musste feststellen, dass ich wohl einen Kopierfehler hatte. JEtzt funktioniert alles so wie es sein soll. Ich danke euch und werde mir mal die die verlinkten Datenbankgrundlagen anschauen.

Danke euch noch mal
TC