pope skrev:
> jeg fandt ud af inde på mysql.com at mysql dato fuction er den samme
> som i access "NOW()"
O.k.
> mit problem, var bare at en NOW() i mysql skrives omvendt f.eks
> 2004-12-31 hvor i access skrives den ud som f.eks 31-12-2004,
Sålænge du arbejder med datoværdier og ikke datorepræsentationer, er det
fuldstændigt ligegyldigt hvordan databasen vælger at prænsentere en dato
for dig.
> og da jeg skrev min udløbsdato i en asp fil med en almindelig now()
> function, som bruger kunne ændre, men jeg fandt ud af, hvis jeg
> vendte min dato om i asp filen, og brugte din sql sætning, virker det
> perfekt!
Bruger du en datotype til datoen i mysql? Hvis du gør det - og i øvrigt
sørger for at bruge datofunktioner fra databasen når du skal skrive og
sammenligne datoværdier, så er der ingen problemer.
Løsningen med at "vende" datoen i asp lyder meget ustabil. Er du sikker
på at den virker for alle datoer?
Prøv at se forskellen på de to sætninger her:
strSQL = "INSERT INTO tabel (datofelt) VALUES ('" & Now() & "')"
strSQL = "INSERT INTO tabel (datofelt) VALUES (Now())"
Den første bruger asp-funktionen Now til at generere en dato. Den bliver
så oversat til en tekstværdi og sendt som en del af sql-sætningen til
databasen. Nu er det op til databasen at afgøre hvordan datoen skal
fortolkes - og her kan man let risikere at databasen tænker i mm-dd-yyyy
mens asp-parseren tænker i dd-mm-yyyy.
I den anden funktion eksisterer det problem ikke. Databasen modtager
blot et kald til sin egen funktion Now - og beregner dags dato så den
bliver indsat korrekt. Som bruger kan man være fuldstændig ligeglad med
om databasen arbejder med dd-mm-yyyy eller mm-dd-yyyy - datoen skal nok
komme rigtigt ind.
> Øh... ja altså jeg prøvede på at vende min asp dato om i sql
> sætningen, og inde mysql.com havde jeg set, at man evt. kunne gøre
> det på den måde,
Det lyder stadig som en dårlig plan.
> strSQL = "SELECT * FROM nyhedsmodul WHERE udloebsdato >= now()"
Det ser til gengæld godt ud. Dog skal du være opmærksom på om
grænsetilfælde også håndteres korrekt. Hvis udloebsdato er sat uden et
tidspunkt vil det af nogle databaser blive opfattet som kl. 00 den dag -
og da sammenligningen med now() også medtager tidspunktet, vil der i
praksis ikke være forskel på udloebsdato >= now() og udloebsdato > now()
- med andre ord, hvis der er angivet udløbsdato d. 13. september 2004,
vil nyheden blive vist til og med 12. september 2004.
Man kan vælge at tilpasse sql-koden så der bliver sammenlignet uden
timeantal, eller bare acceptere at den udløbsdato man sætter i tabellen
altså er den første dato en post _ikke_ skal vises.
--
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