Vraag & Antwoord

Webprogrammeren & scripting

[ASP] Syntaxisfout bij UPDATE

2 antwoorden
  • Ik heb een beetje een vaag probleem... ik heb een site met foto's en daar kan worden gestemd (mooi/plus of niet mooi/min). Daarvoor gebruik ik het volgende scriptje: [code:1:5973db8a64] <!-- #include file="constanten.asp" --> <% Dim fotoid, stem, objConn, sql, rs, isql, irs, nieuw fotoid = Request.Querystring("foto") stem = Request.Querystring("stem") If Request.Cookies(""&fotoid&"") = "gestemd" Then Response.Redirect("foto.asp?foto="&fotoid) Else If stem = "plus" Then Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open ""&dbc&"" sql = "SELECT * FROM foto WHERE id = " &fotoid Set rs = objConn.Execute(sql) nieuw = Int(rs("plus") + 1) isql = "UPDATE foto SET plus = "&nieuw&" WHERE id = " &fotoid Set irs = objConn.Execute(isql) rs.Close Set rs = Nothing objConn.Close Set objConn = Nothing ElseIf stem = "min" Then Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open ""&dbc&"" sql = "SELECT * FROM foto WHERE id = " &fotoid Set rs = objConn.Execute(sql) nieuw = Int(rs("min") + 1) isql = "UPDATE foto SET min = "&nieuw&" WHERE id = " &fotoid Set irs = objConn.Execute(isql) rs.Close Set rs = Nothing objConn.Close Set objConn = Nothing Else Response.Redirect("foto.asp?foto="&fotoid) End If Response.Cookies(""&fotoid&"") = "gestemd" Response.Redirect("foto.asp?foto="&fotoid) End If %> [/code:1:5973db8a64] Lijkt mij dat het prima zou moeten werken, en dat doet het ook als je stemt op [b:5973db8a64]plus[/b:5973db8a64], maar zodra je kiest voor [b:5973db8a64]min[/b:5973db8a64] geeft mn browser de error: Microsoft JET Database Engine (0x80040E14) De instructie UPDATE bevat een syntaxisfout. /stem.asp, line 34 Geen idee waardoor het komt, want voor zover ik het kan zien zijn beide sql-query's precies gelijk (afgezien van plus en min dan)... bij plus telt ie in de db er ook goed eentje bij op.. en in de access-db zijn zowel plus als min een numeriek veld. What's the problem and how can it be solved? BvD :lol:
  • In dit soort gevallen kan je altijd het best de samengestelde query naar het scherm schrijven in plaats van deze uit te voeren op de database (zo zie je of bijvoorbeeld variabelen wel gevuld zijn en zo ja, welke waarden deze bevatten). De samengestelde query kan je bovendien in geval van twijfel ook nog rechtstreeks op de database uitvoeren (copy&paste) aangezien je daar soms betere foutmeldingen krijgt. Overigens wordt de foutmelding die je krijgt hoogstwaarschijnlijk veroorzaakt door de kolomnaam [b:3b272e2933]min[/b:3b272e2933]. Dat is namelijk een [i:3b272e2933]reserved word[/i:3b272e2933]. Onderstaande zal in dat geval de oplossing zijn, maar beter is het imho om een andere kolomnaam te kiezen. [code:1:3b272e2933] isql = "UPDATE foto SET [min] = " & nieuw & " WHERE id = " & fotoid [/code:1:3b272e2933] De code die je hier toont is eigenlijk behoorlijk omslachtig. Zomaar een paar tips/opmerkingen: [list:3b272e2933] [*:3b272e2933]Om het voor jezelf (en voor ons) overigens makkelijker te maken lijkt het me beter als je je code inspringt. Dat maakt het meteen een stuk leesbaarder. [*:3b272e2933]je haalt gegevens op die onnodig zijn, gebruik [color=darkred:3b272e2933][i:3b272e2933]SELECT kolom[/i:3b272e2933][/color:3b272e2933] i.p.v. [color=darkred:3b272e2933][i:3b272e2933]SELECT *[/i:3b272e2933][/color:3b272e2933] [*:3b272e2933]je maakt een recordset aan (irs) die je verder niet gebruikt en deze wordt bovendien niet gesloten. [i:3b272e2933][color=darkred:3b272e2933]objConn.Execute(isql)[/color:3b272e2933][/i:3b272e2933] is dus voldoende [*:3b272e2933]ophalen van het aantal voordat je deze ophoogt is niet nodig: [i:3b272e2933][color=darkred:3b272e2933]UPDATE tabel SET kolom = kolom+1 WHERE foo = bar[/i:3b272e2933][/color:3b272e2933] [*:3b272e2933]Ik zie dat je voor elke foto een apart cookie bijhoudt. Ik weet niet hoeveel foto's je denkt te gaan bijhouden in je poll, maar misschien is het op voorhand verstandig als je eens naar de limieten van [url=http://www.cookiecentral.com/]cookies[/url] kijkt. Er zijn betere methoden om dit bij te houden (waarvan de simpelste waarschijnlijk een komma gescheiden lijst is). [*:3b272e2933]Een gedeelte van je code kan op onderstaande manier een stuk korter[/list:u:3b272e2933] [code:1:3b272e2933] If stem = "plus" Then isql = "UPDATE foto SET plus = plus+1 WHERE id = " & fotoid Elseif stem = "min" isql = "UPDATE foto SET [min] = [min]+1 WHERE id = " & fotoid Else Response.Redirect "foto.asp?foto=" & fotoid End If objConn.Execute(isql) objConn.Close Set objConn = Nothing [/code:1:3b272e2933]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.