16. februar 2005 - 15:09Der er
13 kommentarer og 1 løsning
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
Hej Eksperter
Jeg skal opdatere min Mysql database, men den melder fejl.
<% 'Opdaterer status i ordretabellen Set rs_add_status = Server.CreateObject("ADODB.RecordSet") rs_add_status.open "Select * from ordrer where id = " & Request.QueryString("order_id") & "", Conn,1,3 rs_add_status.update rs_add_status("status") = "2" rs_add_status.update %>
[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-standard-log]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'by='Århus C' AND email='xxxxx@xxxxxx.com' AND telefon='123456
/files/file_12.asp, line 109
Linje 12 = rs_add_status.update (den sidste)
Jeg har prøvet uden den første update, det virkede heller ikke :o(
Det lyder lidt underligt for den fejl kode er med en helt anden where del end den du har vist: by='Århus C' AND email='xxxxx@xxxxxx.com' AND telefon='123456
I den SQL du bruger er der kun: id = " & Request.QueryString("order_id") & ""
men fejl i linie 109, som er 50 linier længere nede..
Men før jeg indsatte: <% 'Opdaterer status i ordretabellen Set rs_add_status = Server.CreateObject("ADODB.RecordSet") rs_add_status.open "Select * from ordrer where id = " & Request.QueryString("order_id") & "", Conn,1,3 rs_add_status.update rs_add_status("status") = "2" rs_add_status.update %> Virkede det fint!
Prøver lige at indsætte hele koden, kan være at det giver mere mening: ---------------------------------------------------------------------------------------- <% Session.LCID = 1030
Totalt_kurv = 0
Set RS_kurv_status = Server.CreateObject("ADODB.RecordSet") RS_kurv_status.open "Select * from kurv WHERE session_id = " & "" & request.QueryString("no")& "", Conn,1,3 DO WHILE NOT RS_kurv_status.eof SET RS_vare_pris = Server.CreateObject("ADODB.RecordSet") RS_vare_pris.open "SELECT * FROM produkter WHERE id = " & RS_kurv_status("vare_nr") & "", Conn,1,3 'Reng pris ud - gange hvor mange eksemplarer der er bestilt 'Gemmer i variabel Totalt_kurv = Totalt_kurv + RS_vare_pris("pris") * RS_kurv_status("vare_antal")
ElseIf request.QueryString("Action") = "add_lines" Then 'Tilføjer de bestilte produkter til ordrelinjer Set rs_pris = Server.CreateObject("ADODB.RecordSet") Set rs_add_orderline = Server.CreateObject("ADODB.RecordSet") Set rs_kurv = Server.CreateObject("ADODB.RecordSet")
rs_add_orderline.open "Select * from ordre_linjer", Conn,1,3 rs_kurv.open "SELECT * FROM kurv WHERE session_id = " & request.QueryString("no"), Conn,1,3 Do while not rs_kurv.eof 'Finder prisen til hver varer rs_pris.open "SELECT * FROM produkter WHERE id = " & rs_kurv("vare_nr"), Conn,1,3 rs_add_orderline.addnew rs_add_orderline("ordre_id") = request.QueryString("order_id") rs_add_orderline("produkt_id") = rs_kurv("vare_nr") rs_add_orderline("antal") = rs_kurv("vare_antal") rs_add_orderline("pris") = rs_pris("pris") rs_add_orderline.update rs_pris.close rs_kurv.movenext Loop
'Sletter indholdet af indhøbskurven Set RS_kurv_kasse = Server.CreateObject("ADODB.RecordSet") RS_kurv_kasse.open "Select * from kurv WHERE session_id = " & request.QueryString("no"), Conn,1,3 do while not RS_kurv_kasse.EOF RS_kurv_kasse.delete RS_kurv_kasse.update RS_kurv_kasse.MoveNext Loop
ElseIf request.QueryString("Action") = "pay" Then pris = request.QueryString("pris") + 25 If Request.QueryString("pay_type") <> "1" Then 'Sender brugeren videre til information omkring alternativ betaling Response.redirect "?site_id=20&pay_type=" & request.QueryString("pay_type") & "&pris=" & pris & "&order_id=" & request.QueryString("order_id") Else
'Opdaterer status i ordretabellen Set rs_add_status = Server.CreateObject("ADODB.RecordSet") rs_add_status.open "Select * from ordrer where id = " & Request.QueryString("order_id") & "", Conn,1,3 rs_add_status("status") = "2" rs_add_status.update %> .... Her efter kommer der en dankortformular ----------------------------------------------------------------------------------------
Det kan ikke være i den del af koden der er jo ikke noge af de SQL sætninger som har noget med by, email eller telefon at gøre.
Angående dankortformular er det en SQL sætning der liger du bruger adresse oplysninger by, email og telefon. by er reserveret ord i SQL (order by, group by) så prøv at sætte ` omkring by så det bliver til:
altså siden inden sender jeg en form med de oplysninger, som bliver registreret her: 'Tilføjer ordren til databasen Set rs_add_order = Server.CreateObject("ADODB.RecordSet") rs_add_order.cursorlocation = 3 rs_add_order.open "Select * from ordrer", Conn,1,3 rs_add_order.addnew rs_add_order("dato") = date() rs_add_order("tid") = time() rs_add_order("status") = "1" rs_add_order("navn") = Request.Form("navn") rs_add_order("adresse") = Request.Form("adresse") rs_add_order("postnr") = Request.Form("postnr") rs_add_order("by") = Request.Form("by") rs_add_order("telefon") = Request.Form("telefon") rs_add_order("email") = Request.Form("email") rs_add_order("besked") = Request.Form("besked") rs_add_order.update
Det har virket fint hele tiden. Så ville jeg hvis de havde valgt at betale med dankort opdatere deres status på ordren fra 1 til 2: 'Opdaterer status i ordretabellen Set rs_add_status = Server.CreateObject("ADODB.RecordSet") rs_add_status.open "Select * from ordrer where id = " & Request.QueryString("order_id") & "", Conn,1,3 rs_add_status("status") = "2" rs_add_status.update
Det har virket perfekt indtil jeg indsatte ovenstånde "opdateringsscript"..
Det er for mærkeligt - når jeg fjerner den sidste update - melder den ingen fejl - men status feltet bliver så heller ikke rettet - ARghhh går snart tilbage til access :o(
min erfaring med mySQL og recordset er at det med .Addnew og .Update en gang imellem kan drille, men laver man det som SQL sætninger og executer dem igemmen en connection virker det.
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.