Ga naar inhoud

[ASP] Syntaxisfout bij UPDATE


anoniem

Aanbevolen berichten

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:
Link naar reactie
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]
Link naar reactie
Super, aan zulke uitleg heb ik iets. Nooit aan reserved words gedacht, maar het wordt me nu wel duidelijk :D ! Dankje voor de extra uitleg over de update query, scheelt weer een hoop flauwekulbewerkingen. Het stemmen werkt, zal ik nu even iets aan mn koekjes doen (heb net gelezen over de limieten die eraan zitten, en daar krijg ik zeker problemen mee). Bedankt!
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...