warom doet de filter op datum dit

Status
Niet open voor verdere reacties.

dinoshop

Terugkerende gebruiker
Lid geworden
8 sep 2000
Berichten
1.100
ik heb een filter maar deze werkt niet zoals moet hij filter op de verkeerde datum zie bijlage .
filter.jpg
 
Je bent in de ultieme Microsoft val gestruind, en dat is exact de reden dat ik deze manier van filteren nooit gebruik. De val? VBA filter met Amerikaanse datumnotatie. En jouw datums staan in Europees format. 11-8-2014 is voor het filter dus 8-11-2014, en 7-9-2014 is in 'werkelijkheid' 9-7-2014. Happy filtering! De enige juiste oplossing is dus voorkomen dat datums worden omgedraaid, en dat doe ik zelf door de datum van het formulier om te zetten naar een getal met CDBL, en dat getal in het filter weer terug te converteren naar een datum. Inderdaad, met CDate. Wat jij nu doet met CDate heeft geen enkel effect overigens, want een datum converteren naar een datum? Kun je net zo goed proberen een chocoladeijsje te verkopen als chocoladeijsje :).
 
sfilter = (Format("iDatum = #{0:dd/MM/yyyy}#", Date))

hier vertel ik dus dat de datum is dag maand en jaar
maar of dit de goede code is????
chocolade heb ik er uit gehaald haha
 
Laatst bewerkt:
Dit ziet er prachtig uit, met dat lachebekje, maar gaat uiteraard niet werken. Want ook dit is een onbruikbaar format. Zoals ik al zei: de veiligste manier is de datum (tijdelijk) converteren. En dat doe je zo:
Ik heb twee variabelen gedeclareerd, die twee datumtekstvakken als basis gebruiken.

Code:
Dim iStart As Long, iEind As Long
Dim strSQL As String
Dim qDef As QueryDef

iStart = CDbl(Me.EersteDatum)
iEind = CDbl(Me.LaatsteDatum)
Set qDef = CurrentDb.QueryDefs("qTemp")
strSQL = "SELECT FactuurNR, FactuurDatum, KindNR, Afwezig, Boete, Betaald, InfoBoete, VD_Effectief, HD_Effectief " _
    & "FROM Factuur WHERE (FactuurDatum Between CDate(" & iStart & ") And CDate(" & iEind & ")) ;"
qDef.SQL = strSQL
DoCmd.OpenQuery "qTemp"
De truc zit 'm er dus in dat je de query zelf een datum laat maken van een getal. Ik gebruik hier een tijdelijke query waarvan ik de SQL verander. Handige oplossing als je af en toe eens een query wilt testen. Maakt niet uit welke query er onder hangt, als de query qTemp heet, kun je de bron veranderen.
In die query zit dan op het veld [Factuurdatum] dit criterium als ik de query uitvoer:
Code:
Between CDate(40909) And CDate(42004)
Mag je zelf uitzoeken welke datums dit zijn :)
 
Octo

even iets raars dan
jij hebt mij toen geholpen met idem vraag maar met subfomulier en daar werkt dit wel gewoon goed dus dd/mm/yyyy
wat is verschil nu dan?
 
Er is een tweede oplossing, die gebruik maakt van het Format commando i.c.m. met een opmaakstring. Die kan ook werken. Dan krijg je iets als:
Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
        strWhere = "(" & strDateField & " >= " & Format(Me.StartDate, strcJetDate) & ")"
        strWhere = strWhere & "( AND " & strDateField & " <= " & Format(Me.EndDate, strcJetDate) & ")"
Dat werkt ook redelijk. Mijn methode is feilloos. Dus die gebruik ik zelf.
Als je een datum in wilt vullen op een formulier met VBA, dan werkt de normale methode prima. Het probleem krijg je pas als je een query maakt met VBA.
 
octo ik probeer het maar krijg niet goed zou je svp even willen kijken wat ik verkeerd doe. en aanpassen .

Code:
Private Sub Periode_Click()
Dim sFilter As String
Dim iDatum1 As Date, iDatum2 As Date
Dim strDateField As String

Const strcJetDate = "\#mm\/dd\/yyyy\#"
strDateField = "[StartDatum]"

iDatum1 = (Me.Periode.Column(1))
iDatum2 = (Me.Periode.Column(2))

If IsDate(Me.Periode) Then

sFilter = "Startdatum between #" & iDatum1 & "# and #" & iDatum2 & "#"
With Forms!frmProjecten
     filter = sFilter
     FilterOn = True
 Else
        Me.Periode = ""
        Me.filter = ""
        Me.FilterOn = False
    End If
End With

End Sub
 
Laatst bewerkt:
Als je in Periode.Column(#) een datum hebt staan, dan moet je daar de Format op los laten met de constante. Dat doe je niet. Het heeft ook niet zoveel zin een constante te definiëren en hem niet te gebruiken :)
Code:
sFilter = "[Startdatum] BETWEEN " & Format(Me.Periode.Column(1),strcJetDate) & "  AND " & Format(Me.Periode.Column(2),strcJetDate)
 
ik weet niet hoe ik je moet danken wat is dat moeilijk met tijd werken
heel er g bedankt
is ergens een site waar je dit soort dingen terug vind ???
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan