Avatar billede krel Nybegynder
17. oktober 2007 - 22:20 Der er 24 kommentarer og
2 løsninger

datoformat i kalender

Hey. jeg ved dette har været oppe og vende før men syns jeg har prøvet alt hvad jeg kan for at få datoen til at blive vist rigtigt.. jeg har dette script:

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

Set rs=Conn.Execute("select * from [jobdata] where [datostempel]=#"&Request.Querystring("date")&"# order by starttid asc")

If Not rs.EOF Then
Response.Write "<b>" & FormatDateTime(rs("datostempel"),2)&"</b><br>"
Do While Not rs.EOF
if rs("godkendt") = false and rs("heledagen") = false then Response.Write "(" & FormatDateTime(rs("starttid"),4)&"-" & FormatDateTime(rs("sluttid"),4)&") reserveret"
if rs("godkendt") = false and rs("heledagen") = true then Response.Write "(HELE DAGEN) reserveret <br>"
if rs("godkendt") = true and rs("heledagen") = falset then Response.Write "OPTAGET " & FormatDateTime(rs("starttid"),4)&"-" & FormatDateTime(rs("sluttid"),4)&"<br>"
if rs("godkendt") = true and rs("heledagen") = true then Response.Write "OPTAGET HELE DAGEN<br>"
if rs("godkendt") = false and rs("heledagen") = false then strlink = "<br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
if rs("godkendt") = false and rs("heledagen") = true then strlink = "<br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
if rs("godkendt") = true and rs("heledagen") = false then strlink = "<br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
if rs("godkendt") = true and rs("heledagen") = true then strlink = "<br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
rs.MoveNext
Loop
Response.Write strLink&"</td></tr>"
Else
Response.write "<b>"&Request.Querystring("date")&"</b>"
Response.write "<br>-ingen booking-<br><br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"

End If
rs.Close
%>

det virker fint med <% session.LCID=1033 %> (engelsk/amerikansk format mm/dd/yyyy) men hvis jeg ændre til at bruge <% session.LCID=1030 %> (dansk format dd-mm-yyyy) går det helt i fisk!

så er der nogen der har en ide til enten at det også virker med dansk format eller som alternativ kan man så skrive et script der tar dag måned og år udfra feltet i databasen hver for sig så man så kan sætte det op som man vil evt. med (.) i stedet for (/)

mvh
Kristian
Avatar billede nielle Nybegynder
18. oktober 2007 - 08:42 #1
Først et spørgsmål: Hvad er datatyperne på felterne datostempel, starttid og sluttid i din database?

Du kan starte med at udskille datoformateringen i din egen funktion. Dermed kan du arbejde med datoformatet centralt i denne, hvorefter det vil slå igennem over alt.

Hvis du har brug for at formatere din dato på præceis den måde du ønsker, kan du tage fat i funktionerne Day(), Month(), MonthName(), Weekday(), WeekdayName() og Year() og sammensætte din dato ud af dem:

http://www.w3schools.com/vbscript/vbscript_ref_functions.asp

Jeg har omformateret din kode sådan at den bliver nemmere at læse (for mig), og har samtiodig rettet en lille "falset" til "false". Se koden nedenfor.

<%
Function MyFormatDateTime(dato, datoFormat)
    MyFormatDateTime = FormatDateTime(dato, datoFormat)
End Function

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/fpdb/kristhedj.mdb")

Set rs = Conn.Execute("select * from [jobdata] where [datostempel] = #" & Request.Querystring("date") & "# order by starttid asc")

If Not rs.EOF Then
    Response.Write "<b>" & MyFormatDateTime(rs("datostempel"), 2) & "</b><br>"
    Do While Not rs.EOF
        if rs("godkendt") = false and rs("heledagen") = false then
            Response.Write "(" & MyFormatDateTime(rs("starttid"), 4) & "-" & MyFormatDateTime(rs("sluttid"), 4) & ") reserveret"
        end if

        if rs("godkendt") = false and rs("heledagen") = true then
            Response.Write "(HELE DAGEN) reserveret <br>"
        end if

        if rs("godkendt") = true and rs("heledagen") = false then
            Response.Write "OPTAGET " & MyFormatDateTime(rs("starttid"), 4) & "-" & MyFormatDateTime(rs("sluttid"), 4) & "<br>"
        end if

        if rs("godkendt") = true and rs("heledagen") = true then
            Response.Write "OPTAGET HELE DAGEN<br>"
        end if

        if rs("godkendt") = false and rs("heledagen") = false then
            strlink = "<br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
        end if

        if rs("godkendt") = false and rs("heledagen") = true then
            strlink = "<br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
        end if

        if rs("godkendt") = true and rs("heledagen") = false then
            strlink = "<br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
        end if

        if rs("godkendt") = true and rs("heledagen") = true then
            strlink = "<br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
        end if

        rs.MoveNext
    Loop

    Response.Write strLink&"</td></tr>"
Else
    Response.write "<b>"&Request.Querystring("date")&"</b>"
    Response.write "<br>-ingen booking-<br><br><a href='booking.asp'>lav booking</a><br><a href='../kristhedj/chart/index.asp'>skjul detaljer</a>"
End If
rs.Close
%>
Avatar billede fennec Nybegynder
18. oktober 2007 - 08:43 #2
Du får problemer fordi Access kun kan kommunikere med mm-dd-yyyy formatet. Du skal derfor have dig en DBDate funktion, som du sender alle datoer der skal bruges i SQL igennem.

function DBDate(fDate)
  DBDate = right("0"&month(fDate),2) &"-"& right("0"&day(fDate),2) &"-"& year(fDate)
end function

Set rs=Conn.Execute("select * from [jobdata] where [datostempel]=#"&DBDAte(Request.Querystring("date"))&"# order by starttid asc")

Nu skulle du kunne bruge lcid 1030
Avatar billede krel Nybegynder
18. oktober 2007 - 23:44 #3
super tak for svar.. sidder desværre uden så meget fritid det næste stykke tid så der går nok lidt før jeg får kigget på det, men vender hurtigt tilbage med point!
Avatar billede krel Nybegynder
26. oktober 2007 - 15:58 #4
sådan og det virker :D

smider i lige et svar begge 2?
Avatar billede nielle Nybegynder
26. oktober 2007 - 16:39 #5
Svar :^)
Avatar billede krel Nybegynder
28. oktober 2007 - 22:33 #6
hva med dig fennec? giver du ikke også et svar så i kan dele point???
- har faktisk lige et tillægsspørgsmåål hvis det er i orden?

Jeg har dette stykke kode på min side:
#koden
<%
dtmDate = Request.QueryString("date")
dtmToday = Date

If dtmDate = "" Then
  dtmDate = Date
Else
  dtmDate = CDate(dtmDate)
End if
intYear = Year(dtmDate)
strMonth = MonthName(Month(dtmDate))
intDayOfMonth = Day(dtmDate)
dtmFirstDate = DateAdd("d", (-intDayOfMonth)+1, dtmDate)
intFirstDay = Weekday(dtmFirstDate, vbMonday)
%>

så hvis jeg nu vil hive et salgs datostempel ind i en db når en besked sendes hvordan gør jeg så det så det passer med ovenstående svar i begge har givet?

- har prøvet at bakse noget sammen men jeg får en fejl og ved ikke helt om det skyldes at jeg prøver på noget man ikke kan mit eks kommer her:
#eksempel
adoCn.Execute("INSERT INTO kongebogen (titel,afsnit,dato,forfatter) VALUES ('" & strtitel & "','" & strafsnit & "',#"&DBDAte(date())&"#,'"& Session("konge") &"')")

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
mvh.
Kristian
Avatar billede fennec Nybegynder
29. oktober 2007 - 08:18 #7
Hvilken fejl får du??

.o) <-- One eyed Jack
Avatar billede krel Nybegynder
29. oktober 2007 - 15:26 #8
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Microsoft Access Driver] Operation must use an updateable query.

/version2/kongebogen/index.asp, line 128

#linie 128:
adoCn.Execute("INSERT INTO kongebogen (titel,afsnit,dato,forfatter) VALUES ('" & strtitel & "','" & strafsnit & "',#"&DBDAte(date())&"#,'"& Session("konge") &"')")
Avatar billede fennec Nybegynder
29. oktober 2007 - 15:42 #9
Det er sikkert fordi du ikke har skrive skriverettighed til databasen.
Avatar billede krel Nybegynder
29. oktober 2007 - 15:56 #10
??? skægt for har flere DB'er liggende på dette domiane og denne stump kode er kopieret fra et andet dokument på samme domaine og så har jeg kun ændret felt-navnene...

så det syns jeg lyder mærkeligt?
Avatar billede fennec Nybegynder
29. oktober 2007 - 16:30 #11
Du kan have mange database men IIS skal have skriverettighed hertil.
Darkskies har lavet en film til det:
http://www.darkskies.dk/rettigheder.swf
Avatar billede krel Nybegynder
29. oktober 2007 - 23:14 #12
hmm ok. var os bare en tillægs... men hvis det er er det så korret skrevet med det der dato?
Avatar billede nielle Nybegynder
30. oktober 2007 - 06:44 #13
Nej, DBDAte() funktionen er bere3gnet til at præsentere dine datoer pænt i HTML-koden. Dette har ikke noget at gøre med hvordan den skal gemems i databasen. Så der skal den ikke kaldes.
Avatar billede krel Nybegynder
30. oktober 2007 - 17:25 #14
ok.
dvs. man skriver bare "& Dato &" og så hives datoen fra computeren ur ned eller hvordan - det er mere hvis man ikke har en funktion til at lave datoen med eller kan det stykke kode "#koden" ^^ bruges

????
Avatar billede nielle Nybegynder
30. oktober 2007 - 18:17 #15
Den kan ikke gøre noget med "Dato" med mindre du selv putter noget i den. Det er lidt nemmere med Date(9 for dette er en kendt VBScript funktion - dog kan basen nok ikke tage mod den i den "rå" form; basen foretrækker vist at få det på formen yyyy-mm-dd.

Derudover kan du udnytte at de fleste databaser faktisk har en indbygget date funktion som du bare kan bruge. Noget i stil med:

adoCn.Execute("INSERT INTO kongebogen (titel, afsnit, dato, forfatter) VALUES ('" & strtitel & "', '" & strafsnit & "', Date(), '" & Session("konge") & "')")
Avatar billede krel Nybegynder
30. oktober 2007 - 18:33 #16
ok det vil jeg så prøve at rode lidt med :)
Avatar billede fennec Nybegynder
31. oktober 2007 - 13:34 #17
Min DBDate funktion er IKKE beregnet til at vise data. Den er beregnet til at formatere ASP datoer til Databasens format. Hvorfor den hedder "DB"Date.

I dette tilfælde er det en Access database vi arbejder med, hvorfor funktionen formatere til mm-dd-yyyy.
Avatar billede krel Nybegynder
31. oktober 2007 - 14:54 #18
ok så skal slet ikke bruge noget funktion men bare Date() som nielle skriver i sin kommentar ovenover?.. roder med det..
Avatar billede krel Nybegynder
31. oktober 2007 - 21:29 #19
sådan så er jeg tilbage, men nu bliver datoen noget forkert..

ville mene det skulle være dags dato 31.10.2007 men bliver i stedet for 23-07-1894 (?)

tror måske denne stykke kode gør noget:

dim sidsteArstal
sidsteArstal = CDate("22/1/2000")
Do While Not rs.EOF

if year(sidsteArstal)  <> year(rs("dato")) then
end if

???
Avatar billede fennec Nybegynder
01. november 2007 - 08:42 #20
Hvilken værdi står i databasen? Vi skal finde ud af om det er indsættelsen eller udtrækket der er problemer med.
Avatar billede krel Nybegynder
01. november 2007 - 11:23 #21
samme dato.. - det må være indsættelsen den går gal i...
her er min kode:

<%
        strtitel =  trim(replace(request.form("titel"),"'","''"))
        strbesked =  trim(replace(request.form("besked"),"'","''"))
        If strbesked > "" then
       
        Set Conn = Server.CreateObject("ADODB.Connection")
        DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/kongelogen.mdb")
        Conn.Open DSN
       
        SQL = "Insert Into kongebogen (titel,besked,dato,forfatter) values ('" & strtitel & "','" & strbesked & "',"& dtmdate &",'"& Session("konge") &"')"
        Set rs = Conn.Execute(SQL)

        Response.Redirect "index.asp"
       
        End If
        %>

- lægere oppe på siden har jeg desuden dette script i tilfælde af at der er noget der kan bruges?
<%
dtmDate = Request.QueryString("date")
dtmToday = Date

If dtmDate = "" Then
  dtmDate = Date
Else
  dtmDate = CDate(dtmDate)
End if
intYear = Year(dtmDate)
strMonth = MonthName(Month(dtmDate))
intDayOfMonth = Day(dtmDate)
dtmFirstDate = DateAdd("d", (-intDayOfMonth)+1, dtmDate)
intFirstDay = Weekday(dtmFirstDate, vbMonday)
%>
Avatar billede fennec Nybegynder
01. november 2007 - 13:29 #22
Ret:
SQL = "Insert Into kongebogen (titel,besked,dato,forfatter) values ('" & strtitel & "','" & strbesked & "',"& dtmdate &",'"& Session("konge") &"')"

Til:
SQL = "Insert Into kongebogen (titel,besked,dato,forfatter) values ('" & strtitel & "','" & strbesked & "',#"& DBDate(dtmdate) &"#,'"& Session("konge") &"')"

Og brug min DBDate funktione fra tidligere post.
Avatar billede krel Nybegynder
01. november 2007 - 13:46 #23
jamen fantastisk..

kan nu se hvorfor jeg ikke ku få det til at virker med din funktion tidligere.. DBDate skal jo bruges i SQL'en...

jamen super tak!
Avatar billede krel Nybegynder
01. november 2007 - 14:18 #24
-- og så ikke helt alligevel :(

efter at have lukket browseren, computeren og startet op igen er dato'en til min store overraskelse blevet andret til 1894 (!) som før stod som 2007. (I databasen!)

? ? ?
Avatar billede fennec Nybegynder
01. november 2007 - 14:47 #25
Sikker på det ikke er den gamle record??
Er en værdi på 1894 først indsat, vil den blive ved med at have den værdi, medmindre rækken opdateres.
Avatar billede krel Nybegynder
01. november 2007 - 14:51 #26
jeg er 99%.. har prøvet at lave 4 nye som jeg har været inde og tjekke at de er 01-11-2007 så prøver at lukke browser igen...
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