Avatar billede kagge Nybegynder
06. oktober 2004 - 10:44 Der er 55 kommentarer og
1 løsning

Dato i søgestreng

Kan nedenstående overhovedet lade sig gøre:

Jeg vil lave noget statistik på hvor mange registreringer der falder på en bestemt ugedag (mandag).

Den første registrering blev lavet mandag 24-05-2004, så det er fra denne dato og op til dags dato jeg vil finde antallet af.

Det jeg har indtil videre er:

testdato = "24-05-2004"
splitdato = split(testdato ,"-")
datousformat = splitdato(2) & splitdato(1) & splitdato(0)

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.

Håber der er en løsning.
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:08 #1
uden lige at have testet denne så:

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!

/hiks
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:14 #2
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()

/hiks
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:16 #3
og hvis det kun er syv dage du vil have fra startdato til slutdato kan du bruge DateAdd funktionen i din ASP kodning eller direkte i din SQL!


Access funktioner:
http://www.techonthenet.com/access/functions/

/hiks
Avatar billede kagge Nybegynder
06. oktober 2004 - 11:21 #4
Hej Hiks.

Det er access, men jeg får følgende fejl nu:

Syntax error in date in query expression 'Dato Between #20040524# AND Now()'.
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:28 #5
hmmm ok - det er måske pga din datoformatering at now ikke virker. Er ikke helt sikker - vi kan lige prøve at smide en dato ned fra asp istedet:

testdato = "24-05-2004"
slutdato = DateAdd("d", 7, testdato) '+7 dage

splitdato = split(testdato, "-")
datousformat = splitdato(2) & splitdato(1) & splitdato(0)

splitdato = split(slutdato, "-")
datousformatEnd = splitdato(2) & splitdato(1) & splitdato(0)

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;"

/hiks
Avatar billede kagge Nybegynder
06. oktober 2004 - 11:30 #6
Når jeg indsætter ovenstående så får jeg dette:

Subscript out of range: '[number: 2]'
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:41 #7
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:

Function SplitFormat(dato)

  tmpDato = split(dato,"-")
  tmpDato = tmpDato(2) & tmpDato(1) & tmpDato(0)
  SplitFormat = tmpDato

End Function

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;"

/hiks
Avatar billede kagge Nybegynder
06. oktober 2004 - 12:01 #8
Spændende :)

Nu kommer den med denne fejl:

This array is fixed or temporarily locked: 'tmpDato'

Nu er vi ude i noget hvor jeg i hvert fald ikke kan bunde mere :)
Avatar billede eagleeye Praktikant
06. oktober 2004 - 12:01 #9
Brug year, month, day til at formater datoer med så virker det også til andre dato formater end DK.

testdato = "24-05-2004"
slutdato = DateAdd("d", 7, testdato) '+7 dage
datousformat = year(slutdato)&"-"&month(slutdato)&"-"&day(slutdato)
Avatar billede hiks Nybegynder
06. oktober 2004 - 12:06 #10
men det jeg ikke forstår det er hvorfor den så ikke læser us-formatet forkert i den første funktion for der er der jo heller ikke bindestreger i.

i stedet for splitten kan vi prøve det som eagleeye foreslår (vi ændrer funktionen!)

Function SplitFormat(dato)

  SplitFormat = Year(dato) & Month(dato) & Day(dato)

End Function
Avatar billede kagge Nybegynder
06. oktober 2004 - 12:10 #11
Nu har jeg følgende:

Function SplitFormat(dato)

  SplitFormat = Year(dato) & Month(dato) & Day(dato)

End Function

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#'.

Jeg takker i øvrigt for tålmodigheden Hiks :)
Avatar billede hiks Nybegynder
06. oktober 2004 - 12:24 #12
> Jeg takker i øvrigt for tålmodigheden Hiks :)

Ja ja - det skal nok komme til at funke! Engang...

Nu er problemet at det der ikke kommer ud af funktionen er en dato! altså slutdatoen: 7388319 - og det er fordi jeg er en spasser! :o)

testdato = "24-05-2004"
startdato = SplitFormat(testdato)
slutdato = SplitFormat(DateAdd("d", 7, testdato)) '+7 dage

/hiks
Avatar billede hiks Nybegynder
06. oktober 2004 - 12:29 #13
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!

/hiks
Avatar billede kagge Nybegynder
06. oktober 2004 - 12:37 #14
Function SplitFormat(dato)

  SplitFormat = Year(dato) & Month(dato) & Day(dato)

End Function

testdato = "24-05-2004"
startdato = SplitFormat(testdato)
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 >=#" & 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#'.
Avatar billede hiks Nybegynder
06. oktober 2004 - 12:42 #15
jeg skal lige høre dig. Virkede det første udtræk du skrev?

ellers ville jeg jo normalt gøre sådan her:

Function SplitFormat(dato)

  SplitFormat = Year(dato) & "-" & Month(dato) & "-" & Day(dato)

End Function

testdato = "24-05-2004"
startdato = SplitFormat(testdato)
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 >= '" & startdato & "' AND Dato <= '" & slutdato & "' GROUP BY WeekDayName(WeekDay(Dato), True, VbMonday) ORDER BY COUNT(Dato) DESC;"

/hiks
Avatar billede kagge Nybegynder
06. oktober 2004 - 12:56 #16
> jeg skal lige høre dig. Virkede det første udtræk du skrev?

Hvis det er dette du mener:

testdato = "24-05-2004"
splitdato = split(testdato ,"-")
datousformat = splitdato(2) & splitdato(1) & splitdato(0)

strSQL = "SELECT Dato, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato =#" & datousformat & "# GROUP BY Dato ORDER BY COUNT(Dato) DESC"

Jeps dette virkede (Der var 1 post der matchede ovenstående)

Nu ser det sådan her ud:

Function SplitFormat(dato)

  SplitFormat = Year(dato) & "-" & Month(dato) & "-" & Day(dato)

End Function

testdato = "24-05-2004"
startdato = SplitFormat(testdato)
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 >= '" & 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.
Avatar billede hiks Nybegynder
06. oktober 2004 - 13:13 #17
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!

/hiks
Avatar billede kagge Nybegynder
06. oktober 2004 - 13:38 #18
Det var da pisseirriterende!!

Når jeg indsætter din strSQL kommer den stadig bare med "Undefined function 'WeekDayName' in expression

Du får altså lige de point for du har i hvert fald været ihærdig. Jeg synes ikke du skal bruge mere tid på problemet.
Avatar billede hiks Nybegynder
06. oktober 2004 - 14:04 #19
nu skal vi ha det løst det her... :o)

Kan den mon finde ud af weekday bare så?

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!

/hiks
Avatar billede kagge Nybegynder
06. oktober 2004 - 14:12 #20
Det kan den vist ikke finde ud af!!

Får denne fejl:

24-05-2004 2004-5-31

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

Jeg bliver nødt til at smutte nu, men er tilbage i morgen tidlig...

Her er status inden fyraften:

Function SplitFormat(dato)

  SplitFormat = Year(dato) & "-" & Month(dato) & "-" & Day(dato)

End Function
 
response.write(testdato)

testdato = "24-05-2004"
startdato = SplitFormat(testdato)
slutdato = SplitFormat(DateAdd("d", 7, testdato)) '+7 dage

response.write testdato & " " & slutdato

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;"
Avatar billede kagge Nybegynder
06. oktober 2004 - 14:14 #21
Hov der var lige en response.write(testdato) for meget i ovenstående
Avatar billede hiks Nybegynder
07. oktober 2004 - 09:57 #22
skal lige have dig til at tjekke din database hvilket format din amerikanske dato er i?

altså om den er skrevet 20040405 eller 2004-04-05!

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 10:05 #23
Hej igen

Datoerne ligger i databasen efter formatet dd-mm-åååå (07-10-2004).
Avatar billede hiks Nybegynder
07. oktober 2004 - 11:44 #24
hvorfor er det lige at vi sidder og laver det til amerikansk datoformat så?

vil du gerne have det som amerikansk?

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 12:16 #25
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 = "INSERT INTO Registreringer (Tidspunkt,Initialer,Sted,Problemomrade,Problem,Prioritet,Losning,Problemlosning,Videresendt,Henvendelse,Ip" & kolDato & ") VALUES ('" & Replace(request.Form("tidspunkt"),"'","&#39;") & "', '" & request.Form("initialer") & "', '" & request.Form("sted") & "', '" & request.Form("problemomrade") & "', '" & Replace(request.Form("problem"),"'","&#39;") & "', '" & request.Form("prioritet") & "', '" & request.Form("losning") & "', '" & Replace(request.Form("problemlosning"),"'","&#39;") & "', '" & request.Form("videresendt") & "', '" & request.Form("henvendelse") & "', '" & str_ip & "'" & dataDato & ")"
forbindelse.Execute(strSQL)
Avatar billede hiks Nybegynder
07. oktober 2004 - 12:43 #26
prøv lige at lav funktionen om til:

Function SplitFormat(dato)

  SplitFormat = Day(dato) & "-" & Month(dato) & "-" & Year(dato)

End Function

eller brug:

testdato = FormatDateTime("24-05-2004", vbShortDate)
startdato = FormatDateTime(testdato, vbShortDate)
slutdato = FormatDateTime(DateAdd("d", 7, testdato), vbShortDate) '+7 dage

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 12:51 #27
Nu har jeg følgende kode:

Function SplitFormat(dato)

  SplitFormat = Day(dato) & "-" & Month(dato) & "-" & Year(dato)

End Function

testdato = "24-05-2004"
startdato = SplitFormat(testdato)
slutdato = SplitFormat(DateAdd("d", 7, testdato)) '+7 dage

response.write testdato & " " & slutdato

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
Avatar billede hiks Nybegynder
07. oktober 2004 - 12:57 #28
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;"

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:02 #29
Det er det tilsyneladende ikke... Den kommer med præcis samme fejl.
Avatar billede hiks Nybegynder
07. oktober 2004 - 13:04 #30
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

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:13 #31
Så er der ikke fejl mere :)

Men den regner vist ikke rigtigt:

Der er 1 registrering mandag den 24 maj og 0 den 31 maj

Når jeg gør følgende:

<%=recordSet("Antal")%> giver det 6 poster

response.write recordSet.RecordCount giver 4 poster

Men jeg tror du er ved at være på rette vej :) Du har godt nok været tålmodig..
Avatar billede hiks Nybegynder
07. oktober 2004 - 13:20 #32
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

%>

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:25 #33
if buffer = "8" then
 
Function SplitFormat(dato)

  SplitFormat = Day(dato) & "-" & Month(dato) & "-" & Year(dato)

End Function


testdato = "24-05-2004"
startdato = SplitFormat(testdato)
slutdato = SplitFormat(DateAdd("d", 7, testdato)) '+7 dage

response.write testdato & " " & slutdato & " " & startdato

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>
<%

recordSet.movenext
loop

%>
</TABLE>
<%

end if
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:30 #34
ovenstående giver outputtet:

6
3
2
1

I den uge vi tester med burde den kun finde 1 record og skrive:

1
Avatar billede hiks Nybegynder
07. oktober 2004 - 13:33 #35
for så kan du jo gå næste skridt igennem og det er at indsætte en der finder ud af hvilken dag det er:

<%
Dim arrUgeDag(6) 'array der holder styr på antallet af poster de forskellige dage

Function SplitFormat(dato)

  SplitFormat = Day(dato) & "-" & Month(dato) & "-" & Year(dato)

End Function

Sub UgeDag(dato, antal)

    i = Weekday(dato, 2) 'giver ugedagen
    arrUgeDag(i - 1) = arrUgeDag(i - 1) + antal
   
End Sub

testdato = "24-05-2004"
startdato = SplitFormat(testdato)
slutdato = SplitFormat(DateAdd("d", 7, testdato)) '+7 dage

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

%>
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:33 #36
Har fundet logikken i ovenstående.

I den testuge vi leger med er der ialt 12 registreringer

6 registreringer den 27 maj
3 registreringer den 26 maj
2 registreringer den 25 maj
1 registrering den 24 maj
Avatar billede hiks Nybegynder
07. oktober 2004 - 13:36 #37
>I den uge vi tester med burde den kun finde 1 record og skrive:

Det lyder da interessant :o)

Giver den det når du har databasen nede på din egen computer og prøver forespørgslen?

du kan jo prøve at lave en:

response.write strSQL

og kopiere den ind i access!

/hiks
Avatar billede hiks Nybegynder
07. oktober 2004 - 13:37 #38
og det passer i forhold til dataene i databasen?

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:41 #39
> Det lyder da interessant :o)

Havde glemt at vi tidligere pillede VbMonday ud af strSQL

Prøver lige at sætte den ind igen
Avatar billede hiks Nybegynder
07. oktober 2004 - 13:42 #40
husk at sæt den ind i din group by også og ikke bare i select!

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:46 #41
Den kan åbenbart ikke lide den WeekDayName function:

[Microsoft][ODBC Microsoft Access Driver] Undefined function 'WeekDayName' in expression.
Avatar billede hiks Nybegynder
07. oktober 2004 - 13:50 #42
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!

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 13:58 #43
Nu får jeg følgende output:

Monday 1
Tuesday 3
Wednesday 2
Thursday 6
Friday
Saturday
Sunday

Det er faktisk rigtig godt. Kan den nemt laves om så den laver beregningen gældende fra den 24 maj til dags dato (den dato hvor siden loades)
Avatar billede hiks Nybegynder
07. oktober 2004 - 14:03 #44
ja du kan jo faktisk selv styre det med disse to

testdato = "24-05-2004"

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.

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 14:07 #45
Jeg har tjecket outputtet og det passer perfekt i forhold til registreringerne i basen så det ser ud til at det funger :)

Jeg tjecker lige med hvordan det ser ud når jeg ændrer slutdatoen
Avatar billede kagge Nybegynder
07. oktober 2004 - 14:11 #46
der er ialt 132 poster i basen (alle registreret efter den 24 maj)

Når jeg indsætter: slutdato = SplitFormat(Now()) får jeg følgende output:

Monday 10
Tuesday 14
Wednesday 9
Thursday 12
Friday 5
Saturday
Sunday

så der er åbenbart et eller andet galt
Avatar billede hiks Nybegynder
07. oktober 2004 - 14:17 #47
kan jeg få dig til at køre forespørgslen i databasen?

altså kopierer den ud via

response.write strSQL

og sætte ind i access forespørgsel? bare lige for at tjekke om det er kodningen den er gal med!

/hiks
Avatar billede kagge Nybegynder
07. oktober 2004 - 14:19 #48
Jeps.

Jeg bliver nødt til at gå for nu.

Kigger lige på det i morgen

Du skal altså nok få nogle flere point når du ikke gider mere :)
Avatar billede eagleeye Praktikant
07. oktober 2004 - 17:04 #49
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.



Lidt reklame, det står også beskrevet i min artikel "Dato problem med SQL og Access"
http://www.eksperten.dk/artikler/31
Avatar billede kagge Nybegynder
08. oktober 2004 - 10:53 #50
-> hiks

så har jeg kørt forespørgslen i databasen og den finder 71 poster (der er ialt 132 poster. Når jeg skriver strSQL ud ser den sådan her ud:

SELECT Dato, COUNT(Dato) AS Antal FROM Registreringer WHERE Dato >= #24-5-2004# AND Dato <= #8-10-2004# GROUP BY Dato ORDER BY COUNT(Dato) DESC;

Umiddelbart ser det jo fint ud, men jeg har fundet ud af at slutdatoen skaber problemet. den opfatter det som 10. august i stedet for 8. oktober.

Jeg kan se i databasen at der nemlig er 71 poster indtil den 10. august.

Så det eneste problem i koden er altså at den bytter om på dag og måned i slutdato.
Avatar billede kagge Nybegynder
08. oktober 2004 - 11:03 #51
Med dags dato bliver problemet løst ved at lave denne funktion:

Function SplitFormat(dato)

  SplitFormat = Day(dato) & "-" & Month(dato) & "-" & Year(dato)

End Function

om til:

Function SplitFormat(dato)

  SplitFormat = Month(dato) & "-" & Day(dato) & "-" & Year(dato)

End Function

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
Avatar billede hiks Nybegynder
08. oktober 2004 - 11:21 #52
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!

Go weekend!

/hiks
Avatar billede kagge Nybegynder
08. oktober 2004 - 11:22 #53
Det er meget fint.

Du må også have en god forlænget weekend
Avatar billede eagleeye Praktikant
08. oktober 2004 - 15:31 #54
Det skam ikke så svært.

Du skal også formatere start datoen som mm-dd-yyyy som du har formateret slut datoen.
Avatar billede kagge Nybegynder
11. oktober 2004 - 12:55 #55
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

Function SplitFormat(dato)

  SplitFormat = Day(dato) & "-" & Month(dato) & "-" & Year(dato)

End Function

Sub UgeDag(dato, antal)

    i = Weekday(dato, 2) 'giver ugedagen
    arrUgeDag(i - 1) = arrUgeDag(i - 1) + antal
   
End Sub

testdato = "24-05-2004"
startdato =SplitFormat(testdato)
slutdato = SplitFormat(Now())

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

end if
Avatar billede hiks Nybegynder
14. oktober 2004 - 09:47 #56
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
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