Avatar billede kimlarsen1978 Nybegynder
10. august 2006 - 00:56 Der er 9 kommentarer og
1 løsning

Dato bøvl ved update MySQL

Jeg er grøn i MySQL (kommer fra Access). Jeg har et datoproblem.

Det går fint når jeg vil lave en nyrække, men når jeg køre en update fucker den totalt op i det...

Mit indput til ny er:
startdato = 17-09-2005
slutdato = 17-09-2010

Ny:
*********************************
session.lcid = 1030   
startdato = CDate(Upload.Form("annonceStart"))
slutdato = CDate(Upload.Form("annonceSlut"))

Set rs = Server.CreateObject("ADODB.recordset")
strSQL = "Select * From markedAnnonce"
rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic

rs.Addnew
  rs("annonceStart") = startdato
  rs("annonceSlut") = slutdato
rs.Update
***********************************

Her bliver datoerne fint vendt til at stå korrekt i databasen med yyyy-mm-dd 00:00:00


Nu til update.....
jeg henter værdierne ud i en form hvor de står på formen: dd-mm-yyyy.

Mit indput er derfor fortsat:
startdato = 17-09-2005
slutdato = 17-09-2010

Update:
**************************************
session.lcid = 1030   
startdato = CDate(Upload.Form("annonceStart"))
slutdato = CDate(Upload.Form("annonceSlut"))
 
  strSQL = "UPDATE markedAnnonce SET "
  strSQL = strSQL & "annonceStart = '" & startdato & "' "
  strSQL = strSQL & ", annonceSlut = '" & slutdato & "' "
  strSQL = strSQL & " WHERE annonceId = '" & Upload.Form("annonceId") & "' LIMIT 1" 
  conn.execute(strSQL)
***************************************

Nu er datoer blevet til 20-09-2017 05:00:00 og til 20-09-2017 10:00:00


Hvad sker der?
Hvorfor fucker den op når den godt kan ved new?
Hvad gør jeg for at rette det?

Med håb om hjælp...
Avatar billede kimlarsen1978 Nybegynder
10. august 2006 - 00:57 #1
Skal måske lige siges at selve hjemmesiden er i .asp
Avatar billede arne_v Ekspert
10. august 2006 - 01:26 #2
jeg tror at MySQL forventer YMD format i SQL kontekst (som er forskellig fra record set kontekst)

vend dem selv

eller brug parameters
Avatar billede kimlarsen1978 Nybegynder
10. august 2006 - 09:32 #3
Hvad skulle det hjælpe at paramatisere det?

Jeg forsøgte først at genbruge det kode jeg havde fra tidligere da jeg brugte Access, her blev både UPDATDE og NEW lavet gennem record sets. Jeg kunne umiddelbart godt genbruge ADDNEW, men ikke UPDATE gennem record set?

Anyway, så er det vel også bedre at gøre det direkte i SQL frem for record set, ik? Så jeg burde nok også omskrive de steder hvor jeg bruger ADDNEW.

Er der betydelig forskel på performance om jeg gør det ene eller det andet?
Avatar billede arne_v Ekspert
10. august 2006 - 13:47 #4
ADO parameters håndterer YMD versus DMY versus MDY

jeg ville bruge SQL

jeg kender ikke performance karakteristika
Avatar billede kimlarsen1978 Nybegynder
10. august 2006 - 16:37 #5
Har du en fix lille funktion (VB asp) liggende til at vende en dato i format dd-mm-yyyy til yyyy-mm-dd med?
Avatar billede kimlarsen1978 Nybegynder
10. august 2006 - 16:42 #6
og en anden ting.. når jeg laver en UPDATE xxxx SET yyy = 'qqq' osv...

skal der så være '' om alle de værdier der skal sættes? Jeg troede ikke der skulle være om tal og datoer, men det lader det til der skal? Skal der det?
Avatar billede arne_v Ekspert
10. august 2006 - 17:15 #7
du boer ikke saette '' omkring tal (men MySQL accepterer det hvis du goer)

MySQL bruger '' omkring datoer - Access bruger ## - de er bare forskellige
Avatar billede kimlarsen1978 Nybegynder
10. august 2006 - 17:27 #8
okay, jeg er ved at lave en lille split function til datoerne. Smidder du et svar
Avatar billede kimlarsen1978 Nybegynder
10. august 2006 - 17:38 #9
Hejsa
Hvis der er andre der lige mangler en convert funktion må de gerne bruge min:

Den kan lave "DD-MM-YYYY" eller "DD/MM/YYYY" om til "YYYY-MM-DD"

function convertDate(strDate)
    aarDate = split(strDate, "-")
    aarLengde = ubound(aarDate)
    if aarLengde = 0 then
        aarDate = split(strDate, "/")
        aarLengde = ubound(aarDate)
        if aarLengde = 0 then
            'send input retur igen
            convertDate = strDate
        else
            convertDate = makeDatoInSQLFormat(aarDate(0), aarDate(1), aarDate(2))
        end if
    else
        convertDate = makeDatoInSQLFormat(aarDate(0), aarDate(1), aarDate(2))
    end if
end function

function makeDatoInSQLFormat(strDay, strMdr, strYear)
    makeDatoInSQLFormat = strYear & "-" & strMdr & "-" & strDay
end function
Avatar billede arne_v Ekspert
11. august 2006 - 01:22 #10
svar
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