Avatar billede bremer Nybegynder
11. juni 2008 - 11:57 Der er 10 kommentarer og
1 løsning

Syntax error (missing operator) in query expression 'id='

Hej venner,

håber virkelig i kan hjælpe mig her!

Det handler om, at jeg gerne vil kunne opdater en side ud fra et aktuelt ID - men går jeg gå ind på siden, får en bare en fejl kode.

Min kode ser sådan her ud:


<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../database/database.mdb")
Conn.Open DSN
%>

<%

    id = request.form("id")
    billedestor = "stor" & id & ".jpg"
    billedelille =  "lille" & id & ".jpg"
   
    strSQL = "UPDATE produkter SET billede='"&billedestor&"'," &_
    "billede_lille='"&billedelille&"'" &_
    "WHERE id="&id
   
    Conn.execute(strSQL)

%>
&AElig;ndringerne er nu gemt!
<%
    Conn.Close
    set Conn = Nothing
%>


og den fejl kode, jeg får tilbage ser sådan her ud:


Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id='.

/cms/inflow_script.asp, line 19


Har i nogle ideér til hvad jeg gøre forkert?

Mvh. Kasper
Avatar billede sherlock Nybegynder
11. juni 2008 - 12:08 #1
Prøv at udskrive strSQL.

Du mangler et mellemrum før WHERE.
Avatar billede keysersoze Guru
11. juni 2008 - 12:26 #2
ser ud som om at variablen id er tom.
Avatar billede bremer Nybegynder
11. juni 2008 - 12:32 #3
ok! - nu ser mit script sådan her ud.

<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../database/database.mdb")
Conn.Open DSN
%>

<%

    id = request.form("id")
    billedestor = "stor" & id & ".jpg"
    billedelille =  "lille" & id & ".jpg"
   
    strSQL = "UPDATE produkter SET billede='"&billedestor&"'," &_
    "billede_lille='"&billedelille&"'" &_
    " WHERE id=" & id
    response.write strSQL
    Conn.execute(strSQL)

%>
&AElig;ndringerne er nu gemt!
<%
    Conn.Close
    set Conn = Nothing
%>

og min fejl kode ser stadigvæk sådan her ud, efter hvad jeg kan se mangler den stadigvæk at id'et

når jeg tilgå den aktuelle side direkte, skriver jeg sådan her:
http://www.domænenavn.dk/sidenavn.asp?id=217

UPDATE produkter SET billede='stor.jpg',billede_lille='lille.jpg' WHERE id=
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id='.

/cms/inflow_script.asp, line 19
Avatar billede fennec Nybegynder
11. juni 2008 - 12:39 #4
Er det evt en querystring i stedet for en form??
id = request.querystring("id")
Avatar billede natsprinter Nybegynder
11. juni 2008 - 12:43 #5
Det skyldes med rimelig stor sikker hed at du ikke specificerer din id som en talværdi. Det er et kendt problem i ACCESS.

I stedet for:
id = request.form("id")

Skriver du:
id = int(request.form("id"))
Avatar billede natsprinter Nybegynder
11. juni 2008 - 12:45 #6
Hvis du vil tilgå din side med:
http://www.domænenavn.dk/sidenavn.asp?id=217

Skal du ændre:
id = request.form("id")

til:
id = int(request.QueryString(id"))

Da det jo ikke er en id der sendes fra en form, men direkte fra URL.
Avatar billede bremer Nybegynder
11. juni 2008 - 12:49 #7
Thanx - det virker sku nu!!!!!!! tak tak tak...

Sender nu lige et svar?
Avatar billede fennec Nybegynder
11. juni 2008 - 12:52 #8
natsprinter >>
At specificerer sin værdi som talværdi er fuldstændig irelevant i dette tilfælde, og har aldrig været et problem i Access (eller nogen anden DB for den sags skyld).

Man opbygger bare en streng (som jo er tekst) med informationer, også behandler databasen de informationer. Det er fuldstændig hvilke datatyper du bruger, da alt bliver samlet til en tekst streng.

.o) <-- One Eyed Jack
Avatar billede erikjacobsen Ekspert
11. juni 2008 - 13:03 #9
Helt korrekt, fennec, men måden at bygge denne sql-streng op, som vist i dette spørgsmål, giver jo direkte adgang til sql-injection. Sådan noget lægger man ikke på nettet.
Avatar billede fennec Nybegynder
11. juni 2008 - 13:06 #10
erikjacobsen >>
Det er rigtig. Men så er vi ovre i at lave DB-funktioner i ASP til formatring, eller også skal vi have gang i parametre :)
Avatar billede fennec Nybegynder
11. juni 2008 - 13:21 #11
Jeg kan da vise funktion metoden:

function DBNum(fNum)
  if isNumeric(fNum&"") then
    DBNum = replace(fNum&"",",",".")
  else
    response.write "'"& fNum &"' is not a number"
    response.end
  end if
end function

function DBText(fText)
  DBText = replace(fText,"'","''")
end function

function DBDate(fDate)
  if isDate(fDate) then
    DBDate = "#"& right("0"&month(fDate),2) &"-"& right("0"&day(fDate),2) &"-"& year(fDate) &"#"
  else
    response.write "'"& fDate &"' is not a date"
    response.end
  end if
end function

Alle variabler skal så sendes igennem en af disse funktioner afhængig af hvilken datatype man forventer:
strSQL = "UPDATE produkter SET billede='"& DBText(billedestor) &"'," &_
    "billede_lille='"& DBText(billedelille) &"'" &_
    " WHERE id="& DBNum(id)
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