Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 13:13 Der er 18 kommentarer og
1 løsning

Sortering af (danske) datoer med BETWEEN

Jeg skal have udskrevet data fra mdb mellem to datoer!
Det virker fint med datoer på "amerikansk" format dvs "mm/dd/yy" men er det ikke muligt at lave på dansk? "dd/mm/yy"


Jeg har lavet det som nedenstående :

Sql = "SELECT besoeg, kunde,SUM(arbejdstimer + koersel) AS T,SUM(arbejdstimer) AS A, SUM(koersel) AS K FROM report WHERE report.tekniker = '" & session("password-session") & "' AND besoeg BETWEEN '"  & Request("datofra") &"' AND '"  & Request("datotil") &"' GROUP BY besoeg, kunde"
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 13:19 #1
Brug # i stedet for ":

Sql = "SELECT besoeg, kunde,SUM(arbejdstimer + koersel) AS T,SUM(arbejdstimer) AS A, SUM(koersel) AS K FROM report WHERE report.tekniker = '" & session("password-session") & "' AND besoeg BETWEEN #" & Request("datofra") & "# AND #" & Request("datotil") & "# GROUP BY besoeg, kunde"

Men du skal være sikker på at den opfatter "1/3/2006" som 1. marts og ikke som 3. januar. Det afhænger at styresystemets opsætning, og af den type connection du anvender.
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 13:20 #2
Jeg skal lige vide om kolonnen besoeg er et datofelt, eller tekst?
Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 13:24 #3
det er tekst - MEN indeholdende dato
Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 13:28 #4
Jeg har tidligere i min proces prøvet # istedet for ' men gør jeg dette udskrives indet
Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 13:29 #5
der skulle naturligvis stå "intet"
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 13:45 #6
Dit problem er at du bruger tekstfelter i stedet for datofelter. Det gør det lidt svært.

BETWEEN vil så gå efter den alfabetiske rækkefølge så 2006/04/01 vil ligge efter 2006/03/31 og før 2006/04/02.

Hvis du altså skriver datoerne i et format hvor årstal kommer først, så måned og så dato, så vil det virke, hvis du altid bruger foranstillede nuller, altså 2006/04/02, ikke 2006/4/2.
Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 14:00 #7
Nu har jeg rettet det i databasen til værende datofelt, og sat # om mit request - og nu sorterer den korrekt. Men på trods af at datoerne i databsen står dd-mm-yyyy så viser den liste jeg udskriver mm/dd/yyyy. Prøvede lige <%=Datevalue(besoeg)%> omkring, med det gjorde intet....

Men ellers tak for svar!
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 14:10 #8
Vi er i noget ASP, ikke?

Først: Det du ser når du åbner access'en er ikke det format datoen står i. Et datofelt er i virkeligheden et talfelt, der gemmer antallet af milisekunder siden 1/1/1900. Det du ser er Access's fortolkning, og formatet kan bestemmes i Design Table. Men det bestemmer kun hvordan Access viser datoen.

Når du henter datoen ud til en ASP-side, så er det den driver du angiver i din connectionstring der henter datoen, og det er serveren der bestemmer hvilket format den skal vises i, med mindre du bestemmer det i din kode.

Prøv at skrive
Session.LCID = 1030
- øverst i filen, hvis det altså er ASP
Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 14:15 #9
Ja ASP lige præcis....
Tænkte nok at der var noget med Session.LCID.
Jeg sad lige og ledte efter en artikel jeg så fornylig hvor alle "landekoder"/Session.LCID var beskrevet... Kunne bare ikke huske hvordan jeg fandt den artikel!??

Nu kører det
SUPER! tak for hjælpen
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 14:27 #10
Det var da dejligt.

Men når du nu bruger Datofelter, så skal du checkke de steder hvor der skrives datoer til databasen, der kan let være noget galt nu, men det kan løses. Check hvad der sker med ugyldige datoer (31/2 eller 54/16) og check om den opfatter 1/2 som 1. feb eller 2. jan.


Der er mange der er "bange" for datofelter, men læg en besked her hvis du får brug for hjælp med det, det er ikke så svært.
Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 14:39 #11
Hmm ja, der er naturligvis lidt kludder.
Ugylige datoer såsom 54-16-2006 laver bare en "Data type mismatch in criteria expression." - og det er jo "fint" nok.
Datoer med "tal under 31" eksempelvis 12-16-2006 laves derimod om til 16-12-2006
Avatar billede matthiasmarkussen Nybegynder
23. marts 2006 - 14:54 #12
Og nu er det lige gået op for mig at der rent faktisk kun sorteres efter dag!
vælges der mellem 01-03-2006 og 20-03-2006 udskrives alle datoer med dage mellem 1 og 20 uanset måned :-(
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 21:35 #13
OK, først kan vi se på hvordan du gemmer datoer.

Bruger du en UPDATE eller INSERT sætning? Eller bruger du ADO's funkntionalitet; Rec.AddNew, Rec.Update?

Og i din select, hvilket format bruger du?

Både i INSERT/UPDATE og i SELECT skulle du prøve at bruge formatet #yyyy/mm/dd#, for det format vil databasen aldrig misforstå.
Avatar billede matthiasmarkussen Nybegynder
24. marts 2006 - 08:48 #14
jeg indsætter det således :

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("stitilmdb.mdb")

SQLstmt = "INSERT INTO report (blablabla,besoeg,blablabla)"
SQLstmt = SQLstmt & " VALUES ("' & blablabla & '",#" & request.form("besoeg") & "#,'" & blablabla & "')"

response.write sqlstmt

Conn.Execute (SQLstmt)




conn.Close
Set conn = nothing
Set SQLstmt = nothing

response.redirect ("hertil.asp")
%>
Avatar billede ldanielsen Nybegynder
24. marts 2006 - 09:02 #15
OK

Man som sagt, sørg for at datoerne er formateret som #yyyy/mm/dd#, så bliver det rigtigt.

Lav f.eks. en function i en include-fil der gør det, denne accepterer datoer i formatet dd-mm-yyyy:

Private Function SqlDate (strInput)
  Dim arrDato
  arrDato = Split(strInput, "-")
  SqlDate = "#" & arrDato(2) & "/" & arrDato(1) & "/" & arrDato(0) & "#"
end Function

Og så:
SQLstmt = "INSERT INTO report (blablabla, besoeg) " & _
  " VALUES ('" & blablabla & "', " & SqlDate (Request.Form("besoeg")) & ")"
Avatar billede matthiasmarkussen Nybegynder
24. marts 2006 - 09:51 #16
hmm synes ikke rigtigt jeg kan få det til at virke. Bruger jeg ovenstående sorterer det stadig forkert
Avatar billede ldanielsen Nybegynder
24. marts 2006 - 10:07 #17
Må jeg se et eksempel?
Avatar billede matthiasmarkussen Nybegynder
24. marts 2006 - 10:13 #18
Jeg har lige fået det til at virke tror jeg. Har rodet lidt frem og tilbage - og så var den der vist!...

Med mindre jeg støder på et eller andet jeg har glemt at teste for, Så TAK!
Avatar billede ldanielsen Nybegynder
24. marts 2006 - 10:38 #19
Velbekomme.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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