strSQL = "SELECT Dato, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato =#" & datousformat & "# GROUP BY Dato ORDER BY COUNT(Dato) DESC"
Ovenstående kode finder antallet af poster der er registreret den 24-05-2004, men hvordan får jeg den nu til at tælle 7 dage frem og tælle videre osv. Søgestrengen skulle jo gerne være dynamisk.
Jeg har selv tænkt på at lægge søgestrengen i en løkke og så tælle datoen op med 7 dage for hvert gennemløb indtil den når dags dato, men kan bare ikke lige overskue hvordan man kan skrue det sammen.
SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato =#" & datousformat & "# GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
Og det er forhåbentlig i en access database eller så glemmer du bare svaret!
sorry det kunne være jeg skulle læse hele spørgsmålet... :o)
SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >=#" & datousformat & "# AND Dato <= Now() GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
Du kan alternativt også bruge Where Dato Between #" & datousformat & "# AND Now()
strSQL = "SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >=#" & datousformat & "# AND Dato <= #" & datousformatEnd &"# GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
det er da dejligt :) Kan du ikke lige prøve at tjekke hvilke værdier/datoer der kommer i testdato og slutdato vha reponse.write - fordi det må være et array problem
evt prøv at lave en funktion til at splitte og formattere den dato med:
testdato = SplitFormat("24-05-2004") slutdato = SplitFormat(DateAdd("d", 7, testdato)) '+7 dage
response.write testdato & " " & slutdato
strSQL = "SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >=#" & testdato & "# AND Dato <= #" & slutdato &"# GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
testdato = SplitFormat("24-05-2004") slutdato = SplitFormat(DateAdd("d", 7, testdato)) '+7 dage
response.write testdato & " " & slutdato
strSQL = "SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >=#" & testdato & "# AND Dato <= #" & slutdato &"# GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
------
Nu kommer der følgende fejl:
Syntax error in date in query expression 'Dato >=#2004524# AND Dato <= #7388319#'.
og så skal du jo lige have rettet den der testdato i sql'en også så der i stedet for testdato i "startbetingelsen" står startdato - da det er den vi gerne vil bruge i det bestemte format!
strSQL = "SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >=#" & startdato & "# AND Dato <= #" & slutdato &"# GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
----------
Nu skriver den dette på skærmen:
24-05-2004 2004531
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in date in query expression 'Dato >=#2004524# AND Dato <= #2004531#'.
strSQL = "SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
strSQL = "SELECT WeekDayName(WeekDay(Dato), True, VbMonday), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"
------- 24-05-2004 2004-5-31
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Undefined function 'WeekDayName' in expression.
så kom vi jo til sagens kerne :o) Det med udtrækket!
strSQL = "SELECT WeekDayName(WeekDay(Dato), True, 2) AS UgeDag, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY WeekDayName(WeekDay(Dato), True, 2) ORDER BY COUNT(Dato) DESC;"
Det virker hos mig i hvert fald hvis jeg ændrede vbMonday til 2!
strSQL = "SELECT WeekDay(Dato), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY WeekDay(Dato) ORDER BY COUNT(Dato) DESC;"
så kan du altid i din kodning bagefter finde ud af hvilken weekday det er!
strSQL = "SELECT WeekDay(Dato), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY WeekDay(Dato) ORDER BY COUNT(Dato) DESC;"
Nedenstående er bare et eksempel på hvordan jeg indsætter dato i basen!!!
Jeg tror det er mig der har vrøvlet så!! Når jeg smider en dato ned i basen så gør jeg det på følgende måde. Her konveterer jeg "regdato" som er efter formatet 07.10.2004 om til us-format og gemmer i basen. Siger man så ikke at det er gemt i us-format eller er det bare mig der har misforstået det?
Men du har jo helt ret for i selve databasen står det som 07-10-2004
regdato = Request.Form("dato")
if regdato <>"" then regdatous = split(regdato,".") regdato = regdatous(2) & "-" & regdatous(1) & "-" & regdatous(0) kolDato = kolDato & ", Dato" dataDato = dataDato & ", #" & regdato & "#" end if
connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Helpdesk.mdb") Set forbindelse = Server.CreateObject("ADODB.Connection") forbindelse.Open connectionString, CONN_USER, CONN_PASS
strSQL = "SELECT WeekDay(Dato), COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY WeekDay(Dato) ORDER BY COUNT(Dato) DESC;"
output:
24-05-2004 31-5-2004
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression
prøv lige og se om det er de funktioner i access den ikke kan finde ud af?
"SELECT Dato, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY Dato ORDER BY COUNT(Dato) DESC;"
prøv så i din where betingelse at byt ' ud med # på hver side start og slutdato og lav også en response.write på startdato sammen med testdato og slutdato
ok - lad os nu lige kigge det igennem! Du laver en løkke nu for at få hentet dine poster ud, ik, som er i stil med:
<%
if recordSet.eof = false then while recordSet.eof = false response.write recordSet("dato") & " " & recordSet("Antal") & "<br>" recordSet.moveNext wend else response.write "Ingen poster i intervallet!" end if
strSQL = "SELECT Dato, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= #" & startdato & "# AND Dato <= #" & slutdato & "# GROUP BY Dato ORDER BY COUNT(Dato) DESC;"
end if
-----
<% if buffer = "8" then %>
<TABLE BORDER=1 WIDTH="100%"> <TR bgcolor ="#DDDDDD"> <TD WIDTH="50%"> <B>Antal registreringer</B> </TD> </TR> <% do while not recordSet.eof %> <TR bgcolor ="#FFFFFF"> <TD> <%=recordSet("Antal")%> </TD> </TR> <%
strSQL = "SELECT Dato, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= #" & startdato & "# AND Dato <= #" & slutdato & "# GROUP BY Dato ORDER BY COUNT(Dato) DESC;"
'fyr sql ned i databasen her via database connection
if recordSet.eof = false then while recordSet.eof = false Call UgeDag(recordSet("dato"), recordSet("antal")) recordSet.moveNext wend else response.write "Ingen poster i intervallet!" end if
for i = 0 to 6 Response.Write WeekdayName(i + 1, False, 2) & " " & arrUgeDag(i) & "<br>" next
ok, det kan være en ældre driver eller lign de kører hos din host - prøv at sæt det ind jeg pastede før kl. 13:33:27 - hvor jeg lavede en sub hvor at kodningen løber dit recordset igennem og udskriver array'et den har talt dage sammen i!
startdato = SplitFormat(testdato) 'startdatoen er baseret på testdatoen slutdato = SplitFormat(Now()) 'baseret på serverens tid når siden loades
husk lige at tjek de beregninger der oppe om de passer - altså om mængden af registeringer passer!
Nu ved jeg ikke hvad det her skal bruges til men du kan jo evt. lave en side hvor du har to dropdown menuen (combobokse) hvor een har en startdato og den anden har en slutdato - så kan brugeren selv bestemme udtrækket! Du kan jo selv udfylde de to datoer med request.form.
Når man bruger danske datoer og Access kan man opleve Access bytter rundt på måned og dag. Problemet opstår fordi Access bruger US eller UK dato format via SQL, som enten er yyyy-mm-dd eller mm-dd-yyyy.
Når man så indsætter en dato i dansk dato format som er dd-mm-yyyy, vil Access bytte rundt på dag og måned i datoen.
Der er en løsning og det er at bruge dato funktionerne Year, Month og Day til at formatere din dato.
Så finder den 132 poster fordelt på ugedagene :) Men men men! Når man f.eks laver startdato om til 2. juni 2004 så bytter den igen om på det og tror det er 6. februar og finder derfor stadig 132 poster
ja det er lidt noget rod, men som også eagleeye skriver så er der mange ting omkring de datoer i sql og ikke mindst access.
Jeg kan desværre ikke lige komme til at kommentere yderligere på det nu her da jeg er taget på en forlænget weekend. Men vil gerne kigge videre på søndag/mandag!
Nu har jeg prøvet igen i dag og det hele ser ud til at virke fint. Jeg har også prøvet at ændre startdato til alle mulige andre datoer end den 24-05-2004 og nu kan jeg ikke fremprovokere nogle fejl, så det er jo lækkert.
Jeg vil lige for en god ordens skyld lægge koden der virker her, hvis andre skulle få brug for det.
Jeg bukker og siger tusind tak til dig hiks for din store hjælpsomhed. Også tak til dig eagleeye for dine kommentarer og henvisninger :)
Dim arrUgeDag(6) 'array der holder styr på antallet af poster de forskellige dage
strSQL = "SELECT Dato, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= #" & startdato & "# AND Dato <= #" & slutdato & "# GROUP BY Dato ORDER BY COUNT(Dato) DESC;"
---------
Udskrivningsdelen:
if recordSet.eof = false then while recordSet.eof = false Call UgeDag(recordSet("dato"), recordSet("antal")) recordSet.moveNext wend else response.write "Ingen poster i intervallet!" end if
for i = 0 to 6 Response.Write WeekdayName(i + 1, False, 2) & " " & arrUgeDag(i) & "<br>" next
godt vi kunne hjælpe og håber det funker som det skal!
har dog aldrig selv været ude for så meget skidt med en simpel datosøgning, men sådan går det jo nogen gange! :o)
/hiks
Synes godt om
Ny brugerNybegynder
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.