webForumDet fria alternativet

Hur gör man ??

10 svar · 342 visningar · startad av jwradhe

jwradheMedlem sedan juni 2002711 inlägg
#1

jag försöker att göra så att koden visar inlagget med id blabla och samtidigt updatera last fältet med +1 .

min kod ser ut så här

  <%
Set Connect = Server.CreateObject("ADODB.connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../db/forum.mdb")
SQL = "SELECT * from forum WHERE id= " & (Request.Querystring("id")) &" "
SQL = "UPDATE forum SET last=last+1 WHERE id "& (Request.Querystring("id")) &" "
Set RecSet = Connect.execute(SQL)
%>

får felmeddelande

Microsoft JET Database Engine error '80040e14' 

Syntax error in UPDATE statement. 

/las_trad.asp, line 26

hur ska jag skriva....??

nikoMedlem sedan juni 20022 599 inlägg
#2

WHERE id =" & Request.Querystring("id")

Kanske?

SkarreMedlem sedan apr. 20012 427 inlägg
#3

Du har glömt ett likhetstecken i den andra SQL-frågan.

jwradheMedlem sedan juni 2002711 inlägg
#4

?

nikoMedlem sedan juni 20022 599 inlägg
#5

niko skrev:

WHERE id =" & Request.Querystring("id")

Första gången jag citerar mig själv.

AnkmanMedlem sedan juni 2002116 inlägg
#6

Den första SQL-satsen körs aldrig
??

solbulleMedlem sedan mars 20015 287 inlägg
#7

Som sagt, den första sqlsatsen körs aldrig eftersom du först ger variabeln SQL ett värde och sen på nästa rad ett nytt värde för att sen köra det sista värdet.
- Fast det har väl iofs inte riktigt med ditt problem att göra.

<%
Set Connect = Server.CreateObject("ADODB.connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../db/forum.mdb")
SQL = "UPDATE forum SET last=last+1 WHERE id ="& (Request.Querystring("id"))
Connect.Execute SQL,,128
%>
CoolDudeMedlem sedan aug. 2000304 inlägg
#8

Re: Hur gör man ??

<%
Set Connect = Server.CreateObject("ADODB.connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../db/forum.mdb")
SQL = "SELECT * from forum WHERE id= " & (Request.Querystring("id")) &" "
SQL = "UPDATE forum SET last=last+1 WHERE id "& (Request.Querystring("id")) &" "
Set RecSet = Connect.execute(SQL)
%>

Tror den strängen kan bli väldigt jobbig att ta sig igenom. :OO

Så här skulle jag ha gjort typ.... :stud

Set Connect = Server.CreateObject("ADODB.connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../db/forum.mdb")
SQL = "SELECT * from forum WHERE id= " & (Request.Querystring("id")) &" "
[b]Set RecSet = Connect.execute(SQL)

sista=RecSet("last")+1[/b]

SQL = "UPDATE forum SET [b]last='" & sista & "' WHERE id =" & Request.Querystring("id")[/b]
Connect.execute(SQL)

/r Markerat förändringarna... :r

SkarreMedlem sedan apr. 20012 427 inlägg
#9

Att köra t.e.x. "SET foo = foo + 1 ..." har aldrig varit några problem för min del. Väldigt smidigt, till skillnad från din "lösning", CoolDude. :P ;) Men jag är säkert ute och cyklar som vanligt när det gäller ASP.

AnkmanMedlem sedan juni 2002116 inlägg
#10

Det går alldeles utmärkt att köra "SET foo = foo + 1..." Att först skapa ett recordset och sen infoga värdet med ett nytt anrop är ganska onödigt.

nikoMedlem sedan juni 20022 599 inlägg
#11

Inte bara onödigt dessutom potentiellt fel. Om flera personer surfar samtidigt så riskerar man att få ett för lågt värde på "last" i databasen.

För att lösa det så skulle man behöva rama in koden med:

Application.Lock
....
Application.UnLock

Som sagt .. ?

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)