12. marts 2011 - 00:40
Der er
22 kommentarer og 1 løsning
ASP: Update access db fejl
Hej Jeg får flg. fejl når jeg prøver at opdatere records i min access database. Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'. /login/sites/rediger_medarbejder.asp, line 27 Min kode er som flg.: ... Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("db.mdb") Conn.Open DSN strSQL = "UPDATE medlemmer set " strSQL = strSQL & navn = "'" & Request.Form("navn") & "'," strSQL = strSQL & stilling = "'" & Request.Form("stilling") & "'," strSQL = strSQL & titel = "'" & Request.Form("titel") & "'," strSQL = strSQL & uddannet = "'" & Request.Form("uddannet") & "'," strSQL = strSQL & arbejdsopgaver = "'" & Request.Form("arbejdsopgaver") & "'," strSQL = strSQL & billede = "'" & Request.Form("billede") & "'," strSQL = strSQL & mail = "'" & Request.Form("mail") & "'," strSQL = strSQL & " Where Id = " & request.querystring("id") Conn.Execute(strSQL) Conn.Close Set Conn = Nothing Linie 27 er denne linie: Conn.Execute(strSQL) Nogen idé til hvad går galt?
Annonceindlæg fra Cognizant
12. marts 2011 - 03:34
#2
WTF????
12. marts 2011 - 10:06
#3
Sorry - det er selvfølgelig absolut forkert! Må have været ramt af en momentan hjerneblødning i nat :) Dine linjer skal i stedet skrives således; strSQL = strSQL & "navn = '" & Request.Form("navn") & "'," Men problemet med SQL Injection skal der nu stadig tages hensyn til.
12. marts 2011 - 11:03
#4
der er et komma for meget - ret strSQL = strSQL & mail = "'" & Request.Form("mail") & "'," strSQL = strSQL & " Where Id = " & request.querystring("id") til strSQL = strSQL & mail = "'" & Request.Form("mail") & "'" strSQL = strSQL & " Where Id = " & request.querystring("id")
12. marts 2011 - 11:13
#5
#1 + #3 Jeg har prøvet at løse det nu, men uden held. Jeg har jo defineret at den skal opdatere indhold i ID = request.querystring("id") i nederste strSQL linie. Er dette ikke nok? Kan ikke finde fejlen :/ #2 ?? #4 Det er rettet nu, kan egentlig godt se at der var et komma for meget, men jeg får samme fejl.
12. marts 2011 - 11:19
#6
og du har ingen tomme felter i denne sql - i stil med den, jeg lavede om tidligere? Ellers prøv at lave Conn.Execute(strSQL) om til response.write strSQL så kan du hurtigt se, om data er på plads.
12. marts 2011 - 11:26
#7
kommentaren i 2# var til min kommentar #1 som var helt ude i skoven :)
12. marts 2011 - 11:27
#8
Ingen tomme felter, nej. Ved udskrivningen af strSQL får jeg faktisk samme fejl: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'. /login/sites/rediger_medarbejder.asp, line 27 Min kode lige nu er som flg.: Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("../../../database/lsa.mdb") Conn.Open DSN strSQL = "Insert into medarbejdere (" strfelt = "" if Request.Form("navn") <> "" then strfelt = strfelt & "navn, " if Request.Form("stilling") <> "" then strfelt = strfelt & "stilling, " if Request.Form("titel") <> "" then strfelt = strfelt & "titel, " if Request.Form("uddannet") <> "" then strfelt = strfelt & "uddannet, " if Request.Form("arbejdsopgaver") <> "" then strfelt = strfelt & "arbejdsopgaver, " if Request.Form("billede") <> "" then strfelt = strfelt & "billede, " if Request.Form("mail") <> "" then strfelt = strfelt & "mail, " ' fjern sidste " ," strfelt = trim(strfelt) strfelt = left(strfelt,len(strfelt)-1) strSQL = strSQL & strfelt strSQL = strSQL & ") values(" strfelt = "" if Request.Form("navn") <> "" then strfelt = strfelt & "'" & Request.Form("navn") & "'," if Request.Form("stilling") <> "" then strfelt = strfelt & "'" & Request.Form("stilling") & "'," if Request.Form("titel") <> "" then strfelt = strfelt & "'" & Request.Form("titel") & "'," if Request.Form("uddannet") <> "" then strfelt = strfelt & "'" & Request.Form("uddannet") & "'," if Request.Form("arbejdsopgaver") <> "" then strfelt = strfelt & "'" & Request.Form("arbejdsopgaver") & "'," if Request.Form("billede") <> "" then strfelt = strfelt & "'" & Request.Form("billede") & "'," if Request.Form("mail") <> "" then strfelt = strfelt & "'" & Request.Form("mail") & "'," strfelt = left(strfelt,len(strfelt)-1) strSQL = strSQL & strfelt & ")" response.write strSQL Conn.Close Set Conn = Nothing Linie 27: strfelt = left(strfelt,len(strfelt)-1)
12. marts 2011 - 11:33
#9
Husk at se bort fra min kommentar i #1 - når du laver en response.write skal du ikke execute din SQL.
12. marts 2011 - 12:06
#10
vedr 'update' så kalder du tabellen strSQL = "UPDATE medlemmer set " men i den med insert strSQL = "Insert into medarbejdere ("
12. marts 2011 - 22:53
#11
Hov, beklager - jeg er vist kommet til at paste min kode fra det spørgsmål du hjalp med før claes57 - derfor insert Koden er som flg: Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("database.mdb") Conn.Open DSN strSQL = "Insert into medlemmer (" strSQL = strSQL & navn = "'" & Request.Form("navn") & "'," strSQL = strSQL & stilling = "'" & Request.Form("stilling") & "'," strSQL = strSQL & titel = "'" & Request.Form("titel") & "'," strSQL = strSQL & uddannet = "'" & Request.Form("uddannet") & "'," strSQL = strSQL & arbejdsopgaver = "'" & Request.Form("arbejdsopgaver") & "'," strSQL = strSQL & billede = "'" & Request.Form("billede") & "'," strSQL = strSQL & mail = "'" & Request.Form("mail") & "'" strSQL = strSQL & " Where Id = " & request.querystring("id") Conn.Execute(strSQL) Conn.Close Set Conn = Nothing
12. marts 2011 - 22:53
#12
og får samme fejl i linie 27 (Conn.Execute(strSQL)) Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'. /login/sites/rediger_medarbejder.asp, line 27
12. marts 2011 - 22:55
#13
Kl er vist for mange til mig. Beklager forvirringen. Denne sætning bruger jeg IKKE: strSQL = "Insert into medlemmer (" men i stedet denne: strSQL = "UPDATE medarbejdere set" og får altså samme fejl som skrevet i ovenstående indlæg
12. marts 2011 - 23:39
#14
du har ikke ændret det jeg foreslog i #3 - nogle af dine " er sat forkert, det skal ændres til strSQL = strSQL & "navn = '" & Request.Form("navn") & "'," på alle dine linjer. Og husk stadig SQL Injection.
13. marts 2011 - 00:41
#15
Jeg må tilstå at jeg ikke forstår det til fulde UPDATE tabel SET (col1, col2) VALUES ('val1', 'val2') WHERE id = 1 skal jeg her nævne id igen? jeg nævner det jo også til sidst i sql strengen? dvs den skal hedde noget ala UPDATE medlemmer SET (navn, titel, stilling) VALUES ('" & Request.Form("navn") & "'," '" & Request.Form("titel") & "'," '" & Request.Form("stilling") & "',") ? er ret utroligt nok ret grøn på et halvgammelt emne her ;-(
13. marts 2011 - 08:22
#16
UPDATE medlemmer SET (navn, titel, stilling) VALUES ('" & Request.Form("navn") & "', '" & Request.Form("titel") & "', '" & Request.Form("stilling") & "') jeg tror, du skal droppe at arbejde på projektet efter 22:00... ;)
13. marts 2011 - 11:40
#17
Jeg tror lige at vi skal glemme mere eller mindre alt hvad der er skrevet i tråden indtil nu - som skrevet en del gange er alt skrevet i 1#, pånær SQL Injections, noget absolut sludder og de reele ting der er skrevet har du på mystisk vis overset. Derfor prøv med dette; strSQL = "UPDATE medlemmer set " strSQL = strSQL & "navn = '" & Request.Form("navn") & "', " strSQL = strSQL & "stilling = '" & Request.Form("stilling") & "', " strSQL = strSQL & "titel = '" & Request.Form("titel") & "', " strSQL = strSQL & "uddannet = '" & Request.Form("uddannet") & "', " strSQL = strSQL & "arbejdsopgaver = '" & Request.Form("arbejdsopgaver") & "', " strSQL = strSQL & "billede = '" & Request.Form("billede") & "', " strSQL = strSQL & "mail = '" & Request.Form("mail") & "', " strSQL = strSQL & " Where Id = " & request.querystring("id") Hvis det ikke fungere så skriv Response.Write strSQL Response.End umiddelbart før din Conn.Execute(strSQL) og giv os resultatet af det. Fungerer det kan jeg igen kun henvise til artiklen omkring SQL Injections da dit system ellers bliver hullet som en si.
13. marts 2011 - 12:26
#18
og så tjek lige tabel-navnet, og uden komma i #17 linjen strSQL = strSQL & "mail = '" & Request.Form("mail") & "', " som skal være strSQL = strSQL & "mail = '" & Request.Form("mail") & "'"
13. marts 2011 - 12:27
#19
Okay. Det havde jeg nu også prøvet med, men uden held. Får samme fejl som hidtil beskrevet. Ved udskrivningen af SQL strengen får jeg flg. værdier: UPDATE medarbejdere set navn = 'Dennis', stilling = 'x', titel = 'x', uddannet = '01-01-2005', arbejdsopgaver = 'bla,bla,bla', billede = 'dennis', mail = 'mail@mail.dk', Where Id = 1 Det ser vel ok ud?
13. marts 2011 - 12:42
#20
Det skal lige siges at tabellen er ændret til at hedde medarbejdere og ikke medlemmer - hvis du undrer dig over dette
13. marts 2011 - 12:44
#21
så lige kommaet før Where ....il@mail.dk', Where Id = 1
13. marts 2011 - 13:10
#22
Doh! Tusind tak. Vil du lave et svar?
13. marts 2011 - 13:26
#23
løst af claes57 men vil ikke have points
Kurser inden for grundlæggende programmering