Avatar billede ravnkilde Nybegynder
05. oktober 2007 - 12:48 Der er 3 kommentarer og
2 løsninger

Syntax error i SQL

Nedenstående kode giverflg. fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''Hans' Familyname = 'Larsen' Function = 'CEO' Department = 'IT' Country = 'DK' Mobilephone = '+45 8899' Email = 'cra@mail.dk' Registrationdate = '05-10-2007 12:44:38''.

Som det kan ses på udskrivningen af SQL'en mangler der nogle data. Hvem kan hjælpe med at finde fejlen?


--- start kode ---

strSQL = "" & _
  "UPDATE participants " &_
  "SET RegID = '7896', " &_
  "Firstname = '" & Replace(Request.Form("Firstname"),"'","''") & "' " & _
  "Familyname = '" & Replace(Request.Form("Familyname"),"'","''") & "' " & _
  "Function = '" & Replace(Request.Form("Function"),"'","''") & "' " & _
  "Department = '" & Replace(Request.Form("Department"),"'","''") & "' " & _
  "Country = '" & Replace(Request.Form("Country"),"'","''") & "' " & _
  "Mobilephone = '" & Replace(Request.Form("Mobilephone"),"'","''") & "' " & _
  "Email = '" & Replace(Request.Form("Email"),"'","''") & "' " & _
  "Registrationdate = '"&Now&"'" &_
  "WHERE ParticipantsID = " & Request.Querystring("ParticipantID")
ObjConn.Execute(strSQL)
Avatar billede pidgeot Nybegynder
05. oktober 2007 - 12:50 #1
Du mangler kommaer mellem dine felter - du har kun efter RegID.
Avatar billede madeindk Nybegynder
05. oktober 2007 - 13:57 #2
Har lige lavet lidt om på det og så benyttet en lille hjemmelavet funktion som replacer det 'farlige' tegn med ' i stedet.

<%
Function Rep(streng)
    strTemp = Trim(streng)
    If strTemp <> "" Then
        strTemp = Replace(strTemp,"'","&#39;")
    End If
    Rep = strTemp
End Function

strSQL = "" & _
  "UPDATE participants " &_
  "SET RegID = '7896', " &_
  "Firstname = '" & Rep(Request.Form("Firstname")) & "', " & _
  "Familyname = '" & Rep(Request.Form("Familyname")) & "', " & _
  "Function = '" & Rep(Request.Form("Function")) & "', " & _
  "Department = '" & Rep(Request.Form("Department")) & "', " & _
  "Country = '" & Rep(Request.Form("Country")) & "', " & _
  "Mobilephone = '" & Rep(Request.Form("Mobilephone")) & "', " & _
  "Email = '" & Rep(Request.Form("Email")) & "', " & _
  "Registrationdate = '" & Now & "' " &_
  "WHERE ParticipantsID = " & Request.Querystring("ParticipantID")
ObjConn.Execute(strSQL)
%>

Og udover det gør hele koden lidt nemmere at overskue.
Avatar billede pidgeot Nybegynder
05. oktober 2007 - 14:00 #3
Det er nu bedre at escape ' på den måde databasen vil have det - så risikerer man hverken at dataene bliver for lange (du tager jo 4 ekstra tegn per forekomst med den der), eller at man skal konvertere tilbage hvis man engang skal bruge indholdet i noget andet end HTML.
Avatar billede ravnkilde Nybegynder
05. oktober 2007 - 15:23 #4
jeg vil gerne give jer points begge for jeres bidrag. Smid et svar pidgeot!
Avatar billede pidgeot Nybegynder
05. oktober 2007 - 16:54 #5
Værsgo :)
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