nach Datum filtern...

Moderator: ModerationP

nach Datum filtern...

Beitragvon hebru » 05. Mai 2021, 17:40

n´Abend zusammen
hat jemand eine Idee warum folgender Code nicht funct?
in einer Abfrage gibt es ein Feld Datum (steht z.B: 01.01.2021 drin angezeigt wird nur das Jahr)
beim öffnen des Forms sollen nur die Datensätze *2021 angezeigt werden
nun der Code

Private Sub Form_Open(Cancel As Integer)
Dim strdatum, aktdatum As String
strdatum = Format(Jahr, "\#yyyy\-mm\-dd\#") ' das ist das Feld in der Abfrage 01.01.2021
aktdatum = Format("01.01.2021", "\#yyyy\-mm\-dd\#")

Me.FilterOn = aktdatum = strdatum

Me.FilterOn = True

End Sub

aber der Code filtert nicht er zeigt mir alle 2000 Datensätze an
hebru
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17
Registriert: 09. Jun 2017, 21:00

Re: nach Datum filtern...

Beitragvon SGast » 05. Mai 2021, 18:43

Hallo,
versuche es mal so:
Code: Alles auswählen
Private Sub Form_Open(Cancel As Integer)
    Me.Filter = "year([FeldinAbfrage])=2021"
    Me.FilterOn = True
End Sub


Gruß Steffen
SGast
 

Re: nach Datum filtern...

Beitragvon KlausMz » 05. Mai 2021, 18:53

Hallo,
oder mit dem aktuellen JAhr:
Code: Alles auswählen
Private Sub Form_Open(Cancel As Integer)
    Me.Filter = "year(Datumsfeld) =year(Date())"
    Me.FilterOn = True
End Sub


PS:
hat jemand eine Idee warum folgender Code nicht funct?

Der von Dir gezeigte Code ist in fast jeder Zeile falsch.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40099
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: nach Datum filtern...

Beitragvon hebru » 05. Mai 2021, 19:31

läuft .....
Ich Danke Euch beiden
schönen Abend noch
hebru
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17
Registriert: 09. Jun 2017, 21:00

Re: nach Datum filtern...

Beitragvon hebru » 05. Mai 2021, 19:35

KlausMz hat geschrieben:Der von Dir gezeigte Code ist in fast jeder Zeile falsch.


jetzt nicht mehr :wink:
hebru
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17
Registriert: 09. Jun 2017, 21:00

Re: nach Datum filtern...

Beitragvon Gast » 05. Mai 2021, 19:38

Indexfreundlich wäre es dann z.B. so:
Code: Alles auswählen
Me.Filter = "Datumsfeld >= DateSerial(2021, 1, 1) AND Datumsfeld < DateSerial(2022, 1, 1)"

(Aber wer interessiert sich schon für Indexnutzung und Performance ...)
Gast
 

Re: nach Datum filtern...

Beitragvon Gast » 05. Mai 2021, 20:01

Hallo,
Indexfreundlich wäre es dann z.B. so

Was hat das mit einem Index zu tun?
Gruß Karl
Gast
 

Re: nach Datum filtern...

Beitragvon KlausMz » 05. Mai 2021, 22:33

Hallo,
wenn in einer Datenbank gesucht, gefiltert oder sortiert wird, wird von Access versucht die Indextabelle zu verwenden. Das setzt aber 1. voraus, dass das Feld indiziert ist und dass 2. der Index auch genutzt wird. Bei meinem Vorschlag kann wegen der Year() Funktion die Indizierung nicht genutzt werden, selbst wenn das Datumsfeld indiziert ist.
Bei kleineren Datenmengen wird das eher eine geringere Rolle spielen, aber eine Datenbank wird ja auch größer.
Ich kenne weitgehend die Zusammenhänge mit dem Index, vergesse das aber immer wieder zu beachten.
Folge daher dem Vorschalg des Gastes, das Datumsfeld muss dann natürlich auch indiziert werden.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40099
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: nach Datum filtern...

Beitragvon hebru » 06. Mai 2021, 09:39

Gast hat geschrieben:Indexfreundlich wäre es dann z.B. so:
Code: Alles auswählen
Me.Filter = "Datumsfeld >= DateSerial(2021, 1, 1) AND Datumsfeld < DateSerial(2022, 1, 1)"

(Aber wer interessiert sich schon für Indexnutzung und Performance ...)


Danke würde ich auch gerne einsetzen allerdings möchte ich nicht jedes Jahr die Jahreszahlen ändern
gibt es eine Variante die immer das aktuelle Jahr nimmt?
hebru
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17
Registriert: 09. Jun 2017, 21:00

Re: nach Datum filtern...

Beitragvon Bitsqueezer » 06. Mai 2021, 09:50

Hallo,

sicher, ersetze die Jahreszahlen gegen "Year(Date)" und "Year(Date)+1".

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: nach Datum filtern...

Beitragvon KlausMz » 06. Mai 2021, 11:27

Hallo,
@Christian
Damit schließe ich doch aber auch wieder die Nutzung von Indizes aus, oder nicht ?
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40099
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: nach Datum filtern...

Beitragvon Gast » 06. Mai 2021, 11:42

Code: Alles auswählen
Me.Filter = "Datumsfeld >= DateSerial(Year(Date()), 1, 1) AND Datumsfeld < DateSerial(Year(Date()) + 1, 1, 1)"

Date() mit Klammern, also als Funktion. Jet-SQL kann Funktionen auswerten.
Ohne Klammern wäre es ein unbekannter Begriff oder eine Variable. Mit einer Variable kann Jet-SQL nicht direkt umgehen.
Gast
 

Re: nach Datum filtern...

Beitragvon Bitsqueezer » 06. Mai 2021, 11:57

Hallo,

@Klaus: Nö. Die Indexnutzung wird über den Zugriff auf das Feld geregelt, während die Version weiter oben auf "Year(Feld)" verglich, daher ein Funktionsergebnis mit einem Funktionsergebnis vergleicht. Wenn es einen Index auf "Datumsfeld" gibt, dann wird der Wert, der auf der rechten Seite steht, im Index gesucht. Wenn man dagegen "Year(Datumsfeld)" schreibt, muß in jedem Datensatz eine Funktion aufgerufen werden, die das Jahr aus dem Datumsfeld ermittelt und der erhaltene Wert wird dann verglichen. Entsprechend kann kein Index genutzt werden, da man das Ergebnis von "Year" ja nicht im Index findet. Mit einem persistenten, berechneten Feld, daß das Jahr des Datumsfeldes ermittelt und einen eigenen Index hat, könnte man das stattdessen verwenden und dann auch direkt auf Year(Date()) vergleichen. Sowas gibt es in Access-Backends allerdings nicht. Da müßte man das künstlich per VBA in ein eigenes Feld übertragen.

Im Vergleichswert (insbesondere, wenn dieser einen festen Wert ergibt) kann dagegen alles stehen. Der Wert aus DateSerial wird nur genau einmal zu Beginn der Abfrage ermittelt und nicht je Datensatz. Die Performance ginge nur in den Keller, wenn der Vergleichswert auch erst mit jedem Datensatz neu ermittelt werden müßte.

@Gast: Yep, korrekt, mea culpa...:)

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: nach Datum filtern...

Beitragvon knobbi38 » 06. Mai 2021, 12:04

Hallo hebru,

das Thema hatten wir schon öfter:
http://www.office-loesung.de/p/viewtopic.php?t=845359&p=3312771#p3312771

Wenn du dich hier anmeldest, kannst du auch die Anhänge zu den Beiträgen herunterladen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3261
Registriert: 02. Jul 2015, 14:23


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: knobbi38 und 3 Gäste