Henning Smed skrev:
> Fra en Access DB viser jeg en liste over de foregående 3
> måneders poster med nedenstående kode:
[snip]
> Mydate = left(now,10)
Tillykke - du har ramt én af mine kæpheste
Når det gælder datoer bør man altid - *altid* - prøve at holde sig
til databasens datofunktioner. Det sparer dig for en masse
potentielle konverteringsfejl.
Hvis man skal arbejde med en dato der skal beregnes i forhold til
den aktuelle dato (altså fx "nu", "om 5 timer", "for 1 måned
siden"), skal man *ikke* bruge asp/vbscript til at finde datoen -
har man en linje som ovenstående er det et sikkert tegn på at man
er på afveje.
Enhver database har selv funktioner til at håndtere datoer - incl.
en funktion til at generere dags dato (med og uden tid). I Access
er det meget simpelt, da funktionerne er præcis de samme som i asp.
En forespørgsel der udvælger poster fra de sidste 3 måneder kan se
ud som følger:
SELECT IncidentNo FROM tblIncidentLog
WHERE IncidentDate > DateAdd('m',-3,Now())
Hvis tabellen også indeholder poster med en dato der er nyere end
dags dato, kan man bruge between (som i dit eget eksempel):
SELECT IncidentNo FROM tblIncidentLog
WHERE IncidentDate BETWEEN DateAdd('m',-3,Now()) AND Now()
Begge ovenstående forespørgsler skal bare sendes som ren tekst til
databasen - så klarer den alle datoberegninger. Den første
forespørgsel vil fx se ud som følger i asp-koden:
strSQL = "SELECT IncidentNo FROM tblIncidentLog " & _
"WHERE IncidentDate > DateAdd('m',-3,Now())"
Humlen er at man skal skelne mellem DateAdd, DateSerial, Now etc.
brugt i asp og de tilsvarende funktioner anvendt i Access. Hvis man
bruger asp-udgaverne, bliver datoværdier overført som tekst, og der
er risiko for konverteringsfejl (mellem dansk/europæisk format
dd/mm/yyyy og amerikansk format mm/dd/yyyy). Holder man sig til
Access-udgaverne, opstår disse problemer ikke.
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen