Avatar billede cdygaard Nybegynder
14. marts 2002 - 17:52 Der er 3 kommentarer og
2 løsninger

Dato problem

Jeg har det problem at når jeg laver et udtræk fra min SQL database, så laver den fejl i sorteringen efter dato. Mit udtræk ser sådan her ud:

Dato      Arbejdstimer 
13-03-2002      3
3-09-2002      2
3-10-2002      6
3-11-2002      5
3-12-2002      6

Den første dato er korrekt, men i de sidste fire skriver den mm-dd-yyyy istedet for dd-mm-yyyy.
Hcordan kan jeg rette det?
Min kode ser sådan her ud:

If Request.Form("WhatWasChosen") = "ProjectChosen" Then
      ProjectName = Request.Form("ProjectName")
      Set objConn = Server.Createobject("ADODB.Connection")
      strConnString = "Provider=SQLOLEDB;" & _
                      "Persist Security Info=FALSE;" & _
                      "User ID=sa;" & _
                      "Password=pb16950;" & _
                      "Initial Catalog=WorkStatistics;" & _
                      "Initial File Name = C:\Programmer\Microsoft SQL Server\MSSQL\" & _
                      "DATA\WorkStatistics_Data.mdf;"
      objConn.Open strConnString
      strSQL = "SELECT Dags_Dato_DT, Arbejdstimer_IN, Læst_Fra_IN," & _
              " Læste_Sider_IN, Læse_Projekt_BT, Læst_Til_IN " & _
              "FROM WorkProjects_T WHERE Projekt_Navn_VC = '" & ProjectName & _
              "' ORDER BY Dags_Dato_DT"
      Set objRS = Server.Createobject("ADODB.Recordset")
      objRS.Open strSQL, objConn, adOpenStatic, adLockReadOnly, AdCmdText
        If Not (objRS.EOF OR objRS.BOF) Then
      If objRS("Læse_Projekt_BT") = "Sand" Then
        'Projektet er et læse projekt
        objRS.MoveFirst
        StartDate = objRS("Dags_Dato_DT")
        objRS.MoveLast
        EndDate = objRS("Dags_Dato_DT")
        objRS.MoveFirst
        NumberOfDays = 0
        WorkHoursTotal = 0
        ReadPagesTotal = 0
        Do While Not objRS.EOF
            If objRS("Dags_Dato_DT") <> lastDate Then
              NumberOfDays = NumberOfDays + 1
              lastDate = objRS("Dags_Dato_DT")
            End If
            WorkHoursTotal = WorkHoursTotal + CInt(objRS("Arbejdstimer_IN"))
            ReadPagesTotal = ReadPagesTotal + objRS("Læste_Sider_IN")
            objRS.MoveNext
        Loop
        If NumberOfDays <> 0 Then
            AverageRead = ReadPagesTotal / NumberOfDays
            AverageWorkhours = WorkHoursTotal / NumberOfDays
        End If
        Response.Write "<B>&nbsp;&nbsp;&nbsp;&nbsp;'" & Request.Form("ProjectName")
        Response.Write "' blev læst fra d. " & StartDate
        Response.Write " til d. " & EndDate & ", med et gennemsnit på " & Left(AverageRead, 5)
        Response.Write " læste sider pr. dag, og et gennemsnitligt antal arbejdstimer på "
        Response.Write Left(AverageWorkhours, 4) & " timer pr. dag.</B><BR><BR>"
        Response.Write "<CENTER><TABLE BORDER='1'></CENTER><TR><TD><H4>Dato</H4></TD>"
        Response.Write "<TD><H4>Arbejdstimer</H4></TD><TD><H4>Læst Fra</H4></TD><TD><H4>Læst Til</H4></TD>"
        Response.Write "<TD><H4>Læste Sider</H4></TD></TR>"
        objRS.MoveFirst
        Do While Not objRS.EOF
            Response.Write "<TR><TD>" & objRS("Dags_Dato_DT") & "</TD>"
            Response.Write "<TD>" & objRS("Arbejdstimer_IN") & "</TD>"
            Response.Write "<TD>" & objRS("Læst_Fra_IN") & "</TD>"
            Response.Write "<TD>" & objRS("Læst_Til_IN") & "</TD>"
            Response.Write "<TD>" & objRS("Læste_Sider_IN") & "</TD></TR>"
            objRS.MoveNext
        Loop
        Response.Write "</TABLE>"
      Else 'Projektet er ikke et læseprojekt
        objRS.MoveFirst
        StartDate = objRS("Dags_Dato_DT")
        objRS.MoveLast
        EndDate = objRS("Dags_Dato_DT")
        objRS.MoveFirst
        NumberOfDays = 0
        WorkHoursTotal = 0
        Do While Not objRS.EOF
            If objRS("Dags_Dato_DT") <> lastDate Then
              NumberOfDays = NumberOfDays + 1
              lastDate = objRS("Dags_Dato_DT")
            End If
            WorkHoursTotal = WorkHoursTotal + CInt(objRS("Arbejdstimer_IN"))
            objRS.MoveNext
        Loop
        If NumberOfDays <> 0 Then
            AverageWorkhours = WorkHoursTotal / NumberOfDays
        End If
        Response.Write "<B>&nbsp;&nbsp;&nbsp;&nbsp;'" & ProjectName & "' blev foretaget fra d. " & StartDate & " til d. "
        Response.Write EndDate & ", med et gennemsnitligt antal arbejdstimer på i alt "
        Response.Write Left(AverageWorkhours, 4) & " timer pr. dag, og et antal arbejdstimer "
        Response.Write "på i alt " & WorkHoursTotal & " timer.</B><BR><BR>"
        Response.Write "<CENTER><TABLE BORDER='1'><TR><TD ALIGN='center'><H4>Dato</H4></TD>"
        Response.Write "<TD><H4>&nbsp;Arbejdstimer&nbsp;</H4></TD></TR>"
        objRS.MoveFirst
        Do While Not objRS.EOF
            Response.Write "<TR><TD>" & objRS("Dags_Dato_DT") & "</TD>"
            Response.Write "<TD ALIGN='center'>" & objRS("Arbejdstimer_IN") & "</TD>"
            objRS.MoveNext
        Loop
        Response.Write "</TABLE></CENTER>"
      End If
      End If
  objRS.close
  Set objRS = Nothing
  objConn.close
  Set objConn = Nothing
  End If


Avatar billede sylvester1 Nybegynder
14. marts 2002 - 18:00 #1
Dit problem er velkendt! :) Det der sker er, at din server højst sandsynligt bruger en engelsk datosætning - MM-DD-YYYY!
Løsningen er heldigvis meget simpel:
Du indsætter bare følgende i toppen af dokumentet:

<%
SetLocale(1030)
%>

Det, som kodestumpen gør, er at sætte alle de regionale settings til dansk.
Håber det hjælper :)
Avatar billede cdygaard Nybegynder
14. marts 2002 - 19:29 #2
Jeg får stadigvæk det her udtræk:
Dato      Arbejdstimer 
13-03-2002    3
3-09-2002      2
3-10-2002      6
3-11-2002      5
3-12-2002      6
Så det ser ikke ud til at det har hjulpet.
Avatar billede cdygaard Nybegynder
14. marts 2002 - 19:30 #3
Skal man ikke bruge LCID istedet for mon.
Avatar billede coltau Juniormester
14. marts 2002 - 20:56 #4
Dit problem er velkendt men LCID=1030 løser ikke problemet alene. Det er netop det der gør at du får problemet.
LCID = 1030 gør at ASP anvender formatet: DD-MM-YYYY. Men Access anvender altid formatet: MM-DD-YYYY.

Det betyder at denne sætning fejler. (Når strDato = 10.03.2002)
SQL = "insert into tabel set dato=#" & Now & "#"
LCID = 1030 sørger for at sætningen ser sådan ud når den sendes til Access.
SQL = "insert into tabel set dato=#10-03-2002#"
Access opfatter nemlig altid formatet: MM-DD-YYYY og tror at datoen er den. 3.10.2002

Hvis ikke du kan gennemskue ovenstående så kan jeg fortælle dig at du skal ALTID bruge formatet: MM-DD-YYYY i ALLE SQL-sætninger.

Og sæt LCID = 1030 for at få ASP til at vise datoerne korrekt.

Hvis du har mulighed for at se datoerne i Access direkte kan du se at der allerede er vendt om på dag og måned.
Avatar billede dr-kermit Nybegynder
14. marts 2002 - 22:09 #5
Måden jeg har valgt at løse det problem på er simpel...

du laver dit datofelt i databasen om til en INT, så når du skal sætte en dato ind, så laver du datoen om til antal dage siden f.eks. 01-01-2000 så vil det tal så stige med 1 for hver dag der går.... og du kan så altid lave en sortering på dine felter.

Når du så skal præsenterer dit data igen laver du en funktion der lige omregner f.eks 13 til 13-01-2000.

Mvh Kenneth Nielsen
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