Avatar billede medievil Nybegynder
29. oktober 2007 - 16:51 Der er 5 kommentarer og
1 løsning

Fejl ved opdatering af DB

"[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression"

Jeg får den fejl, og tabellerne passer, har hvertfald tjekket flere gange, her er min kode:

<%if session("LOGIN") = 0 then
    this_page = request.ServerVariables("URL")
    Response.Redirect("login.asp?page=" & this_page)
end if%>
<% if Request.QueryString("mode")="" then %>
<html>
<title>News - Rediger</title>
<head>
  <style type="text/css">
  h1 {font-size: 15px; font-family: verdana;}
  p {font-size: 10px; font-family: "verdana";}
  </style>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" width="500">
<tr>
    <td colspan="2"><b><p><font size="4">Rediger</font></p></b></td>
</tr>
<tr>
    <td colspan="2"><p align="center"><!--#include file="menu.asp"--><br><br></p></td>
</tr>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/db/db.mdb")
Conn.Open DSN

strSQL = "Select * from Nyheder where Id = " & Request.Querystring("id")
Set rs = Conn.Execute(strSQL)
%>
<form method="post" Action="rediger.asp?mode=ca&id=<%= rs("id") %>">
<tr>
    <td width="50%"><p>Titel:</p></td>
    <td width="50%"><input type="text" name="Titel" value="<%= rs("Titel") %>"></td>
</tr>
<tr>
    <td width="50%"><p>Content:</p></td>
    <td width="50%"><textarea name="Indhold" cols="60" rows="6"><%= rs("Indhold") %></textarea></td>
</tr>
<tr>
    <td width="50%"></td>
    <td width="50%"><input type="submit" name="submit" value="Update"></td>
</tr>
</form>
<% end if

if Request.QueryString("mode")="ca" then
   
    Titel = Request.Form("Titel")
    Indhold = Request.Form("Indhold")
   
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/db/db.mdb")
Conn.Open DSN

strSQL = "Update nyheder set "
strSQL = strSQL & "Titel= '" & Titel & "', "
strSQL = strSQL & "Indhold= '" & Indhold & "' "
strSQL = strSQL & " Where Id = '" & Request.QueryString("id")

Conn.Execute(strSQL)

Response.Redirect("oversigt.asp")

Conn.Close
Set Conn = Nothing
end if
%>


fejlen sker i linje 62 som er:

strSQL = "Update nyheder set "
strSQL = strSQL & "Titel= '" & Titel & "', "
strSQL = strSQL & "Indhold= '" & Indhold & "' "
strSQL = strSQL & " Where Id = '" & Request.QueryString("id")

Conn.Execute(strSQL)
Avatar billede softspot Forsker
29. oktober 2007 - 16:54 #1
Du skal enten afslutte den streng du sætter omkring værdien for id, eller fjerne en apostrof der står foran (det er vel et tal, så det er nok det sidste der skal til):

strSQL = strSQL & " Where Id = " & Request.QueryString("id")
Avatar billede softspot Forsker
29. oktober 2007 - 16:59 #2
Generelt set, vil jeg da anbefale at du laver lidt mere datavalidering end du gør, for dine SQL-kald kan sagtens komme til at fejle, hvis der f.eks. er angivet en apostrof i titel eller indhold (bare for at nævne et par stykker :)).

Du bør følge dette format for sammensatte SQL-strenge:

strSQL = "Update nyheder set "
strSQL = strSQL & "Titel= '" & replace(Titel,"'","''") & "', "
strSQL = strSQL & "Indhold= '" & replace(Indhold,"'","''") & "' "
strSQL = strSQL & " Where Id = " & replace(Request.QueryString("id"),"'","")

men i øvrigt også kontrollere at request.querystring("id") rent faktisk indeholder et tal (under antagelse af at id er et tal :)), inden du smider den ind i SQL-strengen.

Den optimale løsning ifht. syntaksoverholdelse ville være at bruge et Command-objekt og parametre. Så ville du også slippe for at brugeren kan "ødelægge" din SQL-streng ved at benytte apostrof i sit input... :)
Avatar billede medievil Nybegynder
29. oktober 2007 - 18:19 #3
Jeg fatter ik hvorfor, men da jeg tog det du havde skrevet og kopirede det ind så virkede det.

Det er bare til et admin system så det behøver ik være så avanceret. Men tak for din kommentar, du må hellere lige lægge et svar ;)
Avatar billede softspot Forsker
29. oktober 2007 - 18:32 #4
Det virkede fordi jeg havde fjernet den apostrof du have sat ind efter

" Where id = "

Velbekomme :)
Avatar billede medievil Nybegynder
30. oktober 2007 - 13:45 #5
Doh dum fejl :) Men sådan er det jo.
Avatar billede softspot Forsker
30. oktober 2007 - 14:23 #6
Tjaah, men ser sig ofte blind på de små fejl :-)

Tak for point :)
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



IT-JOB

Acrelec Danmark

IT-supporter

SporingsGruppen ApS

Backend-udvikler

Cognizant Technology Solutions Denmark ApS

Test Manager