Avatar billede pfp Nybegynder
28. november 2002 - 16:59 Der er 7 kommentarer og
1 løsning

Dato og SQL...

Hej,

Jeg har følgende kode som gerne skulle vælge alle poster der er datomærket inden for et brugerdefineret interval (dato).

Dim Startdato, Slutdato
Startdato = Request.Form("Start")
Slutdato =  Request.Form("Slut")
Titel = "Udvidet statistik for besøgende i perioden " & Startdato & " til " & Slutdato & "."

Startdato = Year(Startdato) & "-" & Month(Startdato) & "-" & Day(Startdato)
Slutdato = Year(Slutdato) & "-" & Month(Slutdato) & "-" & Day(Slutdato)

SQL = "SELECT * FROM Statistik WHERE Dato BETWEEN #" & Startdato & "# AND #" & Slutdato & "#"
Set rs = Conn.Execute(SQL)

Dato-feltet i min db, indeholder en Now() værdi, med dansk datobetegnelse..altså f.eks. 28-11-2002 16:59:14

Mine to form felter (Startdato og Slutdato) indeholder f.eks. 20-11-2002 og 25-11-2002.

Men af en eller anden grund virker det ikke optimalt. Ved at bruge førnævnte datoer får jeg kun 2 resultater fra 20-11-2002 selvom jeg ved der også er poster fra den 25-11-2002.

Er der en der kan hjælpe mig?

/peter
Avatar billede neteffect Nybegynder
28. november 2002 - 18:02 #1
Det er ellers ret enkelt: i SQL skal have datoen i amerikansk format, dvs mm-dd-yyyy.

Du skal ikke bekymre dig om internt dato-formater i databasen, kun om formatet, der bruges i den tekststreng, som aflevers til SQL-driveren.

Men når SQL'en er i orden, så er dit virkelige problem, at du får dine datoer fra en inputform. Her må du først sørge for, at brugeren kun kan indtaste gyldige datoer. Dernæst at få trukket måned, dag og år korrekt ud af det indtastede. De indbyggede funktioner Month(), Day() og Year() giver korrekt resultat, under hensyntagen til LCID, når argumentet er i internt VBScript date/time-format. Er argumentet en tekststreng, vil funktionerne forsøge at gætte sig frem til rækkefølgen, og de gætter ofte forkert, typisk først på måneden og i årets første måneder.
Avatar billede pfp Nybegynder
28. november 2002 - 18:16 #2
Så jeg skal altså bare have min bruger til at indtaste 11-25-2002 i stedet for? Eller få noget ASP til at lave om på formatet af det indtastede?
Avatar billede pfp Nybegynder
28. november 2002 - 18:17 #3
Selvom jeg prøver at bruge 11-25-2002 i mit form-felt får jeg samme resultat.
Avatar billede neteffect Nybegynder
28. november 2002 - 18:21 #4
1) din kode skal vide hvilken rækkefølge brugeren indtaster dag-måned-år i.

2) der er sikkert stadig fejl, fordi de indbyggede funktioner Month(), Day() og Year() gætter på rækkefølgen i tekststrengene Startdato og Slutdato.
Avatar billede neteffect Nybegynder
28. november 2002 - 18:26 #5
og 3) der er ingen nemme veje ud af detteher. Hvis man vil lave asp-sider, der kan håndtere danske datoer, må man sørge for at have 100% styr på, hvad der foregår i koden. Og en detalje: Den indbyggede konverteringsfunktion CDate tager ikke hensyn til LCID, hvis man forsøger at konvertere en tekststreng til internt datoformat.

Mit bedste råd er at du laver dig et sæt funktioner til de datomanipulationer du har brug for. Sørg for at teste dine funktioner grundigt, både først og sidst på måneden (og året).
Avatar billede sostack Nybegynder
29. november 2002 - 13:12 #6
eller lave tre tekstboxe til start og tre til slut i formularen! :-}
<p>
Start:<br>
Dag:<input type="tekst" name="stdag">
Måned:<input type="tekst" name="stmd">
Årstal:<input type="tekst" name="staar">
</p>
<p>
Slut:<br>
Dag:<input type="tekst" name="sldag">
Måned:<input type="tekst" name="slmd">
Årstal:<input type="tekst" name="slaar">
</p>

Så er der ikke noget at tage fejl af!
Avatar billede pfp Nybegynder
29. november 2002 - 15:15 #7
sostack -> Kan du uddybe det? Hvordan giver det et forskellig resultat fra det andet?
Avatar billede pfp Nybegynder
14. januar 2003 - 16:52 #8
Nå!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester