Avatar billede seamus Nybegynder
18. januar 2006 - 13:58 Der er 11 kommentarer og
1 løsning

Problemer med at dato bytter rundt

Hej eksperter ...

Jeg vil opdatere databasen så den nye dato bliver den 4. februar 2006 (04-02-2006).

Men det der sker, er, at der bliver skrevet den 2. april 2006 (02-04-2006). Hvilket vil sige den "modsatte" dato. Skriver jeg 02-04-2006 bliver datoen rigtig.

Fra en form får jeg strengen '04-02-2006'

Den putter jeg i variablen strDato.

Min kode ser således ud:

strDato = Request.Form("Dato")
strDato = FormatDateTime(strDato)
strDato = year(strDato)& "-" &month(strDato)& "-" &day(strDato)

    sql = "UPDATE Kalender SET "
    sql = sql & "Dato='" & strDato & "', "
    sql = sql & "Overskrift='" & strOverskrift & "', "
    sql = sql & "Tekst='" & strTekst & "'"
    sql = sql & "WHERE Id = '" & strId & "'"

    set rs = objConn.execute(sql)

Jeg er ved at blive skør af det!! :-)

Er der nogen der kan hjælpe??

(MySQL databasen er i amerikansk format (YYYY-MM-DD)...)
Avatar billede ffsoft Praktikant
18. januar 2006 - 15:16 #1
Når du skal gemme noget i basen så gør i formatet yyyy-mm-dd og når du skal
vise det på skærmen så gør det i formatet dd-mm-yyyy.

Du skal lave to funktioner en til hvert format.

Function DatoIBase(datDato)

Dim Dag, Maaned, Aar

Dag = datepart("d",datDato)
Maaned = datepart("m",datDato)
Aar = datepart("yyyy",datDato)
DatoIBase = Aar & "" & Maaned & "" & Dag

end function

Gem funktionerne i en særskilt fil og lav et include
på hver side der har brug for det.
Avatar billede lordnelson Seniormester
18. januar 2006 - 15:17 #2
Det Usa format er langt det bedste til datoer
særlig npr du vil have det i dato orden eller
intervaller i det den laveste 01-01 og den højeste 12-31

Når jeg bruger dette og henter datoen, altså der hvor jeg skal bruge
den splitter jeg stringen ad vender dage-mdr om og skriver så datoen
på den deanske måde.
Er ikke skrap til php . så der er måske en anden der kan hjælpe med det

men skulle være nemt nok

LN
Avatar billede ffsoft Praktikant
18. januar 2006 - 15:25 #3
Ud fra syntaksen i spørgsmålet tolkede jeg som et ASP
problem, hvis det er PHP kan du sikkert ikke bruge den
løsning jeg har skitseret.
Avatar billede seamus Nybegynder
20. januar 2006 - 09:01 #4
>>ffsoft:
Det er ganske rigtigt ASP op mod en mySQL...

Min kode ser nu sådan ud:

strDato = Request.Form("Dato")  'Værdien  af strengen er 04-02-2006
strDato = FormatDateTime(strDato)
Function DatoIBase(strDato)

Dim Dag, Maaned, Aar

Dag = datepart("d",strDato)
Maaned = datepart("m",strDato)
Aar = datepart("yyyy",strDato)
DatoIBase = Aar & "" & Maaned & "" & Dag

end function

    sql = "UPDATE Kalender SET "
    sql = sql & "Dato='" & DatoIBase(strDato) & "', "
    sql = sql & "Overskrift='" & strOverskrift & "', "
    sql = sql & "Tekst='" & strTekst & "'"
    sql = sql & "WHERE Id = '" & strId & "'"

    set rs = objConn.execute(sql)

I databasen giver det værdien 0000-00-00 - øv...
Avatar billede ffsoft Praktikant
20. januar 2006 - 10:35 #5
DatoIBase = Aar & "" & Maaned & "" & Dag

Rettes til:

DatoIBase = Aar & "-" & Maaned & "-" & Dag

Det var mig der lavede fejlen.
Avatar billede lordnelson Seniormester
20. januar 2006 - 10:43 #6
Hej

hvorfor bruge "-" syntes selv det er nemmere ude "-"
kommer et tal ned der kan bruges til både sortering m.v.
meget smartere end dato format
så jeg syntes dit første eksempel er bedre
Og PS. det virker her hos mig altså nævnte eksempel
giver 200642

LN
Avatar billede seamus Nybegynder
20. januar 2006 - 11:06 #7
>>ffsoft
Har prøvet at sætte "-" ind, hvilket giver datoen 02-04-2006 - dvs. stadig den "omvendte dato"...

Jeg tilgår mySQL via phpMySQLAdmin, og feltet i databasen er af typen DATE - skal det evt. rettes til DATETIME ?
Avatar billede ffsoft Praktikant
20. januar 2006 - 12:42 #8
Sæt response.write sætninger ind så du kan se hvad der sker:

strDato = Request.Form("Dato")  'Værdien  af strengen er 04-02-2006
response.write "1. " & strDato
strDato = FormatDateTime(strDato)
response.write "2. " & strDato

Function DatoIBase(strDato)
Dim Dag, Maaned, Aar

Dag = datepart("d",strDato)
Maaned = datepart("m",strDato)
Aar = datepart("yyyy",strDato)
DatoIBase = Aar & "-" & Maaned & "-" & Dag
end function

response.write "3. " & DatoIBase(02-04-2006)
Avatar billede seamus Nybegynder
21. januar 2006 - 12:11 #9
strDato = Request.Form("Dato") 'returnerer værdien 04-02-2006
strDato = FormatDateTime(strDato) 'returnerer værdien 4/2/2006

Function DatoIBase(strDato)

Dim Dag, Maaned, Aar

Dag = datepart("d",strDato)
Maaned = datepart("m",strDato)
Aar = datepart("yyyy",strDato)
DatoIBase = Aar & "-" & Maaned & "-" & Dag

end function
strDato = DatoIBase(strDato) 'returnerer værdien 2006-4-2

    sql = "UPDATE Kalender SET "
    sql = sql & "Dato='" & strDato & "', "
    sql = sql & "Overskrift='" & strOverskrift & "', "
    sql = sql & "Tekst='" & strTekst & "'"
    sql = sql & "WHERE Id = '" & strId & "'"

    set rs = objConn.execute(sql)

Det ser altså ud som om databasen får de korrekte værdier... Alligevel bliver datoen skrevet som 04-02-2006...
Avatar billede seamus Nybegynder
23. januar 2006 - 12:44 #10
Slåfejl...

Datoen bliver skrevet som 02-04-2006 selvom DB modtager den som 2006-4-2
Avatar billede lordnelson Seniormester
23. januar 2006 - 13:26 #11
Det er derfor jeg ikke bruger date felter i databasen

Brug et tal felt Int eller lign

Lad være med at have de bindestreger på men smid tallet ned
i tabellen så virker det.

LN
Avatar billede seamus Nybegynder
24. marts 2006 - 08:59 #12
Jeg har skiftet mySQL ud med MSSQL, som ikke har denne irriterende bug...
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
Computerworld tilbyder specialiserede kurser i database-management

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