Brian Gregersen skrev:
>> Du begår den fejl at foretage datoudregningen i asp.
>> nydato = DateAdd("d", 3, stv_dato)
Her foretager du en udregning i asp. Nydato er en variabel i asp -
variablen indeholder en dato i et eller andet format.
>> sql = "SELECT ... WHERE nydato >= Date() ..."
Ovenstående er først og fremmest forkert fordi nydato sendes til
databasen som en tekst og ikke som et variabelnavn.
Variabelerstatning sker ikke af sig selv i asp.
Dernæst skal en datoværdi også angives med anførselstegn (i Access
dog med havelåger (#) omkring værdien.
Du _kunne_ derfor skrive:
sql = "SELECT ... WHERE #" & nydato & "# >= Date() ..."
- men problemet ved det er at den datoværdi du har beregnet
tidligere, nu sendes til Access som en tekst, i stedet for som en
datoværdi. Der er flere måder at skrive datoer som tekst på - og
desværre kan to af de mest almindelige nemt fejllæses (dd-mm-yy kan
læses som mm-dd-yy og omvendt).
I eksemplet ovenfor konverteres nydato til en streng - men du kan
ikke være sikker på hvilket format strengen vil være i - og dermed
kan du heller ikke være sikker på at Access vil læse datoen sådan
som du har tænkt den skulle læses.
Ved at benytte datofunktionen i Access, sender du kun værdier
(heltal) der ikke kan misforstås, og dermed har du elimineret en
ellers besværlig fejlkilde.
Koden skrives stadig i asp - for det er også asp der håndterer alle
kald til en database - men datofunktionen eksekveres af databasen,
_ikke_ af asp.
Hvis du skriver:
sql = "SELECT ... WHERE DateAdd(""d"", 3, stv_dato) >= Date()"
- så er det fuldstændig ligegyldigt hvordan din server er sat op.
Accessdatabasen modtager den samme forespørgselsstreng og behandler
den som den skal behandles.
Datoværdier der beregnes i asp er lige så korrekte som dem der
beregnes i Access - men fordi sql-sætninger består af ren tekst
skal en beregnet datoværdi først konverteres til tekst før den kan
behandles af en database. Den konvertering kan som beskrevet nemt
give problemer.
> sql = "SELECT * FROM ASP_L_link WHERE link_grp = 4 AND
> DateAdd(""d"", 3, stv_dato) >= Date() ORDER by stv_dato"
Hvis ovenstående fejler skal du måske prøve med enkelte
anførselstegn omkring "d" - muligvis endda slet ingen.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på
http://usenet.dk/netikette/citatteknik.html