Avatar billede timmwillum Nybegynder
14. marts 2011 - 22:03 Der er 22 kommentarer og
1 løsning

Dato kommer ikke med i databasen ved SQL Insert

Hey alle ...

Jeg er ved at lave en række RS.update om til nogle mere reelle SQL sætninger. Men af en eller anden årsag kan jeg ikke få den til at acceptere mine datoer. Ingen fejlmeddelelser, men databasen registrerer simpelthen ikke inputtet til datofeltet. Min SQL ser således ud:

    sql =     "INSERT INTO tblOrdreStatusHistorik (dato, ordreId, ordreStatus) " & _
    "VALUES (" & _
    date() & ", " & _
    Request.Form("ordreId") & ", " & _
    "'" & Request.Form("ordreStatus") & "'" & _
    ")"

Nogen der kan sige, hvad der er galt?
Avatar billede arne_v Ekspert
14. marts 2011 - 22:21 #1
Det er nok dato formatet som er forkert.

To muligheder:
- find ud af hvilket dato format din database accepterer og formater din Date() til det format
- gør det ordentligt og brug parameters
Avatar billede timmwillum Nybegynder
14. marts 2011 - 22:43 #2
Hey Arne

Godt at høre fra dig igen. Så for jeg mulighed for at kaste nogle point din vej, nu hvor jeg snød dig sidste gang :-)

Hvad betyder det sidste ... brug parameters. Det må du lige forklare en gang. Vil jo helst gøre det på den rigtige måde ...
Avatar billede arne_v Ekspert
14. marts 2011 - 23:00 #3
http://www.eksperten.dk/guide/1250

forklarer lidt om det
Avatar billede timmwillum Nybegynder
15. marts 2011 - 07:32 #4
Ok ... Tak ... Ser på deti aften
Avatar billede timmwillum Nybegynder
15. marts 2011 - 12:58 #5
OK ... fik læst artiklen, som er meget interessant. Tror jeg vil prøve anvende parametre og command til mine SQL input. Ser om jeg kan få det til at virke i aften.

Men nu viser artiklen jo kun eksempler med tekststrenge og siger ikke noget om datoformater. Har jeg ret i, at jeg skal justere i parameteren her:

cmd.Parameters.Append cmd.CreateParameter("@brugernavn", _
      adVarChar, adParamInput, 20, brugernavn)

Gætter mig til at adVarChar skal erstattes med noget andet?
Avatar billede arne_v Ekspert
15. marts 2011 - 14:09 #6
Ja.

Snippet:

cmd.CommandText = "INSERT INTO params(id,tid) VALUES(@id,@tid)"
cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput))
cmd.Parameters.Append(cmd.CreateParameter("@tid", adDate, adParamInput))
cmd.Parameters("@id") = 3
cmd.Parameters("@tid") = CDate("9-JUN-2005")
cmd.Execute
Avatar billede arne_v Ekspert
15. marts 2011 - 14:09 #7
adParamInput = 1
adInteger = 3
adDate = 7
Avatar billede timmwillum Nybegynder
15. marts 2011 - 14:28 #8
Jeg tror jeg forstår, selv om du skriver det lidt anderledes end i artiklen. Men kan ikke gennemskue hvad du mener med:

adParamInput = 1
adInteger = 3
adDate = 7

???
Avatar billede timmwillum Nybegynder
15. marts 2011 - 21:58 #9
Arghhh ... kan ikke få det til at virke Arne. Har prøvet både med din kode og med følgende kode, som er taget fra artiklen og justeret til mit brug:


    'Først opdateres  ordreStatus i tblOrdrer
    sql =     "UPDATE tblOrdrer SET " & _
            "ordreStatus='" & Request("ordreStatus") & "' " & _
            "WHERE ordreId=" & request("ordreID")
    set conn = CreateObject("ADODB.Connection")
    conn.open cString
    conn.execute sql, , 129
   
    'Dernæst opdateres ordreStatusHistorik
    dato = date()
    ordreId = Request.Form("ordreId")
    ordreStatus = request.form("ordreStatus")
   
    sql = "INSERT INTO tblOrdreStatusHistorik (dato, ordreId, ordreStatus) VALUES(?,?,?)"
        set cmd = Server.CreateObject("ADODB.Command")
        set cmd.ActiveConnection = conn
        cmd.CommandText = sql
        cmd.CommandType = adCmdText
        cmd.Parameters.Append cmd.CreateParameter("@dato", _
              adDate, adParamInput, 20, kodeord)
        cmd.Parameters.Append cmd.CreateParameter("@ordreId", _
              adInteger, adParamInput, 20, brugernavn)
        cmd.Parameters.Append cmd.CreateParameter("@ordreStatus", _
              adVarChar, adParamInput, 255, email)



Får fejlen
ADODB.Command error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/admin/fakturaoversigt-vis-detaljer.asp, line 22


Linje 22:
cmd.CommandType = adCmdText


Er det fordi, jeg har den update af ordreStatus i tblOrdrer først?
Avatar billede arne_v Ekspert
16. marts 2011 - 03:23 #10
adParamInput = 1
adInteger = 3
adDate = 7

definerer bare de værdier som skal bruges senere
Avatar billede timmwillum Nybegynder
16. marts 2011 - 08:40 #11
Kan du fortælle mig, hvorfor min kode ikke virker?
Avatar billede arne_v Ekspert
16. marts 2011 - 15:38 #12
cmd.Parameters.Append cmd.CreateParameter("@dato", _
              adDate, adParamInput, 20, kodeord)

ser noget suspekt ud.

dato <> kodeord
Avatar billede timmwillum Nybegynder
16. marts 2011 - 20:08 #13
Samme fejlmeddelelse med:


    sql = "INSERT INTO tblOrdreStatusHistorik (dato, ordreId, ordreStatus) VALUES(?,?,?)"
        set cmd = Server.CreateObject("ADODB.Command")
        set cmd.ActiveConnection = conn
        cmd.CommandText = sql
        cmd.CommandType = adCmdText
        cmd.Parameters.Append cmd.CreateParameter("@dato", _
              adDate, adParamInput, 20, dato)
        cmd.Parameters.Append cmd.CreateParameter("@ordreId", _
              adInteger, adParamInput, 20, ordreId)
        cmd.Parameters.Append cmd.CreateParameter("@ordreStatus", _
              adVarChar, adParamInput, 255, ordreStatus)
Avatar billede arne_v Ekspert
16. marts 2011 - 20:28 #14
Hvad er dato?
Avatar billede timmwillum Nybegynder
16. marts 2011 - 20:48 #15
Dato bliver sat

dato = date()

Lige ovenfor sql opbygningen ...
Avatar billede timmwillum Nybegynder
16. marts 2011 - 22:38 #16
Jeg er ved at blive vanvittig af det her. Nu har jeg snart prøvet alt. Også været tilbage til den oprindelige sql og prøvet at indsætte med forskellige datoformater ... intet virker.

Sjovt nok havde jeg ikke problemer med at indsætte datoer dengang jeg brugte RS.update ... så hvorfor giver det pludselig problemer med SQL UPDATE, når jeg er på samme server og webhotel?
Avatar billede timmwillum Nybegynder
20. marts 2011 - 19:03 #17
Så fik jeg med lidt hjælpe fra en anden tråd min oprindelige SQL UPDATE til at virke. Datolinjen ser nu således ud:

    "'" & year(date()) & "-" & month(date()) & "-" & day(date()) & "', " & _

Egentlig ville jeg egentlig gerne have det til at virke med parametre, da det åbenbart er mere sikkert og korrekt ... men lad nu det ligge.

arne_v ... lægger du ikke lige et svar. Jeg skylder dig jo nogle point fra sidste gang, hvor jeg fik snydt dig. Så kan du passende få dem herfra ...
Avatar billede timmwillum Nybegynder
20. marts 2011 - 19:04 #18
... hvis det er svært at se, så er den grundlæggende forskel i øvrigt en apostrof før og efter datoen ...
Avatar billede arne_v Ekspert
21. marts 2011 - 01:33 #19
Med hensyn til parameter fejlen, så ville jeg ikke angive felt længde til integer og date værdier.

Og du skal naturligvis sikre dig at ad konstanterne er defineret.

Så skal det virke.
Avatar billede arne_v Ekspert
21. marts 2011 - 01:33 #20
og et svar
Avatar billede arne_v Ekspert
21. marts 2011 - 01:34 #21
rs update er noget tricky noget
Avatar billede timmwillum Nybegynder
21. marts 2011 - 11:48 #22
Kan man bare udelade felt længde sådan her?

    cmd.Parameters.Append cmd.CreateParameter("@dato", _
              adDate, adParamInput, dato)
    cmd.Parameters.Append cmd.CreateParameter("@ordreId", _
              adInteger, adParamInput, ordreId)

Eller skal der så være en tom plads som her?

    cmd.Parameters.Append cmd.CreateParameter("@dato", _
              adDate, adParamInput, , dato)
    cmd.Parameters.Append cmd.CreateParameter("@ordreId", _
              adInteger, adParamInput, , ordreId)

Virker parametermetoden kun hvis man definerer konstanterne?

Bare rolig ... jeg er gået helt bort fra rs.update i alle mine filer. Nu er de lavet som almindelige SQL UPDATE.
Avatar billede arne_v Ekspert
27. marts 2011 - 03:14 #23
Se #6 omkring hvordan man definerer parameteren et sted og saetter vaerdien et andet sted.
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