datum in een query

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.680
Er is iets met de manier waarop access met een datumveld omgaat:

als ik een query maak die me gegevens moet tonen die na 08/01/2018 vallen krijg ik geen enkele record te zien
OK.jpg
de bedoeling is me records te laten zien van na 8 januari

als ik de atum anders schrijf, dan krijg ik de correcte records te zien:

NOK.jpg

Hoe kan ik het formaat van de datum veranderen zodat ik toch de correcte records te zien krijg op basis van een datum die er als dd/mm/yyyy uit ziet

Bedankt

JP
 
Je tweede plaatje laat de juiste maand toch zien? Nederlandse datumnotatie (landinstellingen) is 8-1-2018 en niet 8/1/2018. Goeie kans dat dat als Amerikaanse notatie wordt ‘vertaald’ en dan leest Access dus 1 augustus. Wil je het geheid foutloos, gebruik dan de functie DateSerial.
 
hoe schrijf je zo iets weg in een query Michel? (in ontwerpmodus bedoel ik dan)
 
lukt me niet
Die datum haal ik uit een formulier met een kalender waarna ik de query lanceer die hierop gebaseerd is
 
Dan is daarmee je probleem ook duidelijk, als het om de oorzaak gaat. Zou je de datum namelijk rechtstreeks in je query hebben ingevoerd, zoals je suggereert met je plaatje, dan zou het filter (zeker de tweede variant) gewoon moeten werken. Maar als je de query aanstuurt vanuit een formulier, heb je per definitie te maken met de Amerikaanse datumnotatie, en die moet je dus converteren naar een Nederlandse notatie. Ik gebruik daar een simpele truc voor, die ik al ontelbare keren trouwens in het forum heb uitgelegd (zelfs vorige week nog) en die er dan zo uit ziet:

PHP:
    strSQL = "SELECT CODE, LIJN1, KODE, CDate(" & CDbl(Me.start_datum) & ") FROM DATA"
Jij hebt twee tabellen, en andere velden maar ik heb het voorbeeld een beetje simpel gehouden omdat het toch alleen om de conversie van de datum gaat. De truc is dus: je zet in de querytekst CDate(, dan converteer je de waarde uit het formulier naar een getal met CDbl(Me.start_datum) en vervolgens maak je de rest van de query af.
 
Michel,
het zal je niet verbazen, ik kom er niet uit:

Ik schrijf:

Code:
    strSQL = "SELECT DATA.CODE, Count(DATA.CODE) AS AantalCODE, tarief.LIJN1, FROM DATA INNER JOIN tarief ON DATA.CODE = tarief.CODE where data.datum > CDate(" & CDbl(Me.ActiveXBestEl21) & ") GROUP BY DATA.CODE, tarief.LIJN1, DATA.KODE HAVING DATA.KODE = '" & [Forms]![weergave patiënt]![Kode] & "';"

het resultaat van deze query is:

Code:
SELECT DATA.CODE, Count(DATA.CODE) AS AantalCODE, tarief.LIJN1, FROM DATA INNER JOIN tarief ON DATA.CODE = tarief.CODE where data.datum > CDate(43108) GROUP BY DATA.CODE, tarief.LIJN1, DATA.KODE HAVING DATA.KODE = '10079532';

en ik krijg een lege lijst terwijl er eigenlijk 8 records bestaan..

Ik doe us weer iets verkeerd, maar wat?

Sorry hoor..; soms lees ik over Dateserial, dan weer format(weet ik veel wat)... allemaal wat verwarrend..

JP
 
Dateserial lost je probleem niet op (dat doet mijn code namelijk al) maar je schrijft de verkeerde query. Nog afgezien van de fout die er in zit bij de laatste veldnaam. Probeer deze variant eens:
PHP:
strSQL = "SELECT DATA.CODE, Count(DATA.CODE) AS AantalCODE, tarief.LIJN1 " _
    & "FROM DATA INNER JOIN tarief ON DATA.CODE = tarief.CODE " _
    & "WHERE DATA.datum > CDate(" & CDbl(Me.ActiveXBestEl21) & ") " _
    & "AND DATA.KODE=""" & Me.Kode & """ _
    & "GROUP BY DATA.CODE, tarief.LIJN1"
 
Wat mijn probleem perfect oplost... gigantische stap vooruit in mijn programma... was echt wel can capitaal belang
Heel dikke MERCI, weerom, Michel
 
In dergelijke situaties gebruik ik altijd:
PHP:
strSQL = "SELECT DATA.CODE, Count(DATA.CODE) AS AantalCODE, tarief.LIJN1 " _
    & "FROM DATA INNER JOIN tarief ON DATA.CODE = tarief.CODE " _
    & "WHERE DATA.datum > #" & Format(Me.ActiveXBestEl21,"MM\/dd\/yyyy) & "# " _
    & "AND DATA.KODE=""" & Me.Kode & """ _
    & "GROUP BY DATA.CODE, tarief.LIJN1"
 
En dat mag, maar mijn methode is makkelijker en degelijker. En sneller, al is dat alleen meetbaar.
 
@WoutMag
Het is die manier van werken die ik ooit al eens gezien had maar niet meer bedacht kreeg.. maar is dat wel correct? Je schrijft MM\/dd/yyyy...
 
Bij mijn weten is dit een correcte schrijfwijze. Ik ban dat ooit ergens tegen gekomen en gebruik het sindsdien.

Mogelijk heeft het te maken met gebruik van SQL server of Oracle als backend, maar met Access als backend werkt het ook.
 
De uitleg van de format string komt bij Allen Browne vandaan, vermoed ik. En die mag je uiteraard best gebruiken, maar mijn methode is beter omdat Format een tekststring oplevert en CDate altijd een datum. Bovendien ben je niet afhankelijk van landversies. En het is ook nog eens een stuk sneller te schrijven. Maar ieder zijn meug natuurlijk, wat weet ik er nu van? :D.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan