klockrenMedlem sedan sep. 200151 inlägg
Hej,
jag tänkte lägga in ett eget diskussforum på siten. Då jag är asp-nybörjare kopierade jag ett befintligt forum till att börja med. Koden till detta finns att ladda ned på www.tilja.net. Dock får jag detta felmeddelande när jag försöker publicera ett inlägg:
ADODB.Recordset.1 error '80004005'
SQLState: 37000
Native Error Code: -3502
[INTERSOLV][ODBC SequeLink driver][ACCESS][Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.
/forum/response_ins.asp, line 57
Dessutom visas hälsningmeddelandet (den enda post som redan är inlagd i databasen) 100 gånger. Varför?
Det enda jag har modifierat i filerna är raden
Session("databas") = "filedsn=" & Server.MapPath("forum.dsn") & ";DBQ=" & Server.MapPath("forum.mdb")&";"
som jag bytte mot
Session("databas") = "DSN=a1234-forum;Password=mitt_lösenord"
eftersom mitt webhotell kräver att man skapar DSN-kopplingar via deras administrativa gränssnitt.
Detta gör att jag inte kan använda mig av den bifogade forum.dsn-filen. Kan det ha någon betydelse?
Mitt kraschande forum finns att beskåda på http://skolportalen.net/forum/default.asp
/Med vänliga hälsningar (och hopp om ett förklarande svar :) ), Jonas
@ndersMedlem sedan juni 200026 914 inlägg
klockrenMedlem sedan sep. 200151 inlägg
Antar att detta är insert-satserna:
Rs("posted_by") = FixaTecken(TRIM(Request.Form("posted_by")))
Rs("email") = FixaTecken(Request.Form("email"))
Rs("text") = FixaTecken(TRIM(Request.Form("text")))
Rs("ip") = Request.Servervariables("REMOTE_ADDR")
Rs("date") = Now
Rs.Update
Rs.Close
/Jonas
klockrenMedlem sedan sep. 200151 inlägg
Ett tillägg:
Källkodsfilerna finns att kolla på här:
response_ins.txt Det är i denna fil felmeddelandet uppstår!
default.txt
response.txt
settings.txt
@ndersMedlem sedan juni 200026 914 inlägg
Oj, det var ganska mycket där jag inte tycker om. ;)
Dels är fältnamnen under all kritik. Dels används .AddNew för att lägga till poster i tabellen. Dessutom hämtas allt innehåll i tabellen då något ska läggas till. Usch, skäms, tilja. ;)
Kan du ge mig en lista på vilka fält som finns i accesstabellen och vad det är för datatyper, så ska vi nog kunna få detta gjort på ett bättre sätt, med en korrekt INSERT-fråga.
Mvh,
------------------
http://free.webforum.nu/wf/Forum1/HTML/004053.html
klockrenMedlem sedan sep. 200151 inlägg
Tjena,
Databasen forum.mdb innehåller tabellen questions med följande fält:
id -> räknare
ref_id -> tal
subject -> text
text -> PM
date -> datum/tid
ref_date -> datum/tid
posted_by -> text
email -> text
ip -> text
Hela databasen finns här, om någon vill ta sig en ännu närmare titt!
Databasen
klockrenMedlem sedan sep. 200151 inlägg
@ndersMedlem sedan juni 200026 914 inlägg
Ersätt följande:
[red]
set databas=server.createobject("adodb.connection")
set Rs = server.createobject("adodb.recordset")
databas.open session("databas")
Rs.Open "questions",databas,1,2
Rs.AddNew
Rs("subject") = FixaTecken(TRIM(Request.Form("subject")))
IF Request.Form("id")="main" THEN
Rs("ref_id") = 0
ELSE
Rs("ref_id") = FixaTecken(TRIM(Request.Form("id")))
END IF
Rs("posted_by") = FixaTecken(TRIM(Request.Form("posted_by")))
Rs("email") = FixaTecken(Request.Form("email"))
Rs("text") = FixaTecken(TRIM(Request.Form("text")))
Rs("ip") = Request.Servervariables("REMOTE_ADDR")
Rs("date") = Now
Rs.Update
Rs.Close
med:
set databas=server.createobject("adodb.connection")
databas.open session("databas")
IF Request.Form("id")="main" THEN
ref_id = 0
ELSE
ref_id = FixaTecken(TRIM(Request.Form("id")))
END IF
strSQL = "INSERT INTO questions (ref_id, subject, [text], [date], posted_by, email, ip) VALUES (" & ref_id & ", '" & FixaTecken(TRIM(Request.Form("subject"))) & "', " &_
" '" & FixaTecken(TRIM(Request.Form("text"))) & "', #" & Now() & "#, " &_
" '" & FixaTecken(TRIM(Request.Form("posted_by"))) & "', '" & FixaTecken(Request.Form("email")) & "', " &_
" '" & Request.Servervariables("REMOTE_ADDR") & "')"
databas.Execute strSQL,,128[/red]
Sen ropar du! :)
Mvh,
redigering: Man kan redigera sitt inlägg också, om man exempelvis skriver fel sökväg till en databas. Det gör man genom att klicka på 'penna-papper'-ikonen ovanför inlägget. :)
------------------
http://free.webforum.nu/wf/Forum1/HTML/004053.html
[Redigerat av @nders den 15 sep 2001]
klockrenMedlem sedan sep. 200151 inlägg
Verkligen ett jättetack för tipset, nu går det att publicera inlägg i forumet!
Dock kvarstår problemet med den här loopen (som finns i default.asp):
\<%
count = 0
Do Until Rs.EOF OR count = showmsgnr
Id = Rs("id")
SQLStmt = "SELECT \* FROM questions WHERE ref_id = " & Id
RS2.open SQLStmt, databas,1
replycount = 0
Do Until RS2.EOF
replycount = replycount + 1
Rs2.MoveNext
LOOP
Rs2.Close
Response.Write "\<tr onMouseOver=""this.style.backgroundColor='#"& mouseover &"';"" onMouseOut=""this.style.backgroundColor='';""\>\<td\>"
IF RS("date") \> date - 1 THEN Response.Write txt_new & " »" END IF
Response.Write "\</td\>\<td\>\<a href='response.asp?id=" & RS("id") & "'\>" & Server.HTMLEncode(Rs("subject")) & "\</a\>\</td\>\<td\>" & Server.HTMLEncode(Rs("posted_by")) & "\</td\>\<td\>" & Rs("date") & "\</td\>\<td align='middle'\>" & replycount & " \</td\>\</tr\>"
count = count + 1
Rs.MoveNext
LOOP
%\>
Den skriver nämligen ut meddelandena 100 gånger! Jag ser inte riktigt hur jag kan åtgärda detta, någon som har ett litet tips?
Vänliga hälsningar
Jonas
[Redigerat av klockren den 15 sep 2001]
emissionMedlem sedan dec. 19996 095 inlägg
Lite brötig kod...
Hur menar du att den skriver ut 100 gånger?
Så länge kan du byta ut
SQLStmt = "SELECT * FROM questions WHERE ref_id = " & Id
RS2.open SQLStmt, databas,1
replycount = 0
Do Until RS2.EOF
replycount = replycount + 1
Rs2.MoveNext
LOOP
mot
SQLStmt = "SELECT COUNT(*) FROM questions WHERE ref_id = " & Id
RS2.open SQLStmt, databas,1
replycount = RS2(0)
... egentligen kan man lika gärna plocka ut svarsantalet i den första sökningen. Ska kolla hur den ser ut.
klockrenMedlem sedan sep. 200151 inlägg
Det senaste inlägget skrivs ut 100 gånger, alltså 100 rader. :(
Vilket är maxantalet för antal inlägg som visas i forumet. x(
[Redigerat av klockren den 15 sep 2001]
klockrenMedlem sedan sep. 200151 inlägg
:( snyft :(
Är det ingen som ser felet, varför utskriften av inlägg aldrig slutar loopa, utan senast inlagda inlägget skrivs ut maxantalet gånger, alltså hundra.
Utskriftsfunktionen ligger som sagt i default.asp, som jag har länkat till tidigare.
/Jonas
[Redigerat av klockren den 16 sep 2001]
@ndersMedlem sedan juni 200026 914 inlägg
Hmm, detta är lite lustigt. Jag laddade hem tiljas forum, slängde in det i inetpub och körde igång. Det fungerade perfekt! Nu kör ju jag visserligen iis5, och inte pws, men jag vet inte vad det skulle göra för skillnad.
Prova dock att byta följande:
<%
count = 0
Do Until Rs.EOF OR count = showmsgnr
Id = Rs("id")
SQLStmt = "SELECT * FROM questions WHERE ref_id = " & Id
RS2.open SQLStmt, databas,1
replycount = 0
Do Until RS2.EOF
replycount = replycount + 1
Rs2.MoveNext
LOOP
Rs2.Close
Response.Write "<tr onMouseOver=""this.style.backgroundColor='#"& mouseover &"';"" onMouseOut=""this.style.backgroundColor='';""><td>"
IF RS("date") > date - 1 THEN Response.Write txt_new & " »" END IF
Response.Write "</td><td><a href='response.asp?id=" & RS("id") & "'>" & Server.HTMLEncode(Rs("subject")) & "</a></td><td>" & Server.HTMLEncode(Rs("posted_by")) & "</td><td>" & Rs("date") & "</td><td align='middle'>" & replycount & " </td></tr>"
count = count + 1
Rs.MoveNext
LOOP
%>
till:
<%
count = 0
Do Until Rs.EOF
Id = Rs("id")
SQLStmt = "SELECT COUNT(*) FROM questions WHERE ref_id = " & Id
RS2.open SQLStmt, databas,1
replycount = RS2(0)
Rs2.Close
Response.Write "<tr onMouseOver=""this.style.backgroundColor='#"& mouseover &"';"" onMouseOut=""this.style.backgroundColor='';""><td>"
IF RS("date") > date - 1 THEN Response.Write txt_new & " »" END IF
Response.Write "</td><td><a href='response.asp?id=" & RS("id") & "'>" & Server.HTMLEncode(Rs("subject")) & "</a></td><td>" & Server.HTMLEncode(Rs("posted_by")) & "</td><td>" & Rs("date") & "</td><td align='middle'>" & replycount & " </td></tr>"
count = count + 1
if count = showmsgnr then exit do
Rs.MoveNext
LOOP
%>
Mvh,
------------------
http://free.webforum.nu/wf/Forum1/HTML/004053.html
klockrenMedlem sedan sep. 200151 inlägg
Nej, det busar fortfarande med mig, fruktansvärt märkligt.
Som jag skrev i första inlägget var jag dock tvungen att byta raden Det enda jag har modifierat i filerna är raden
Session("databas") = "filedsn=" & Server.MapPath("forum.dsn") & ";DBQ=" & Server.MapPath("forum.mdb")&";"
mot
Session("databas") = "DSN=a1234-forum;Password=mitt_lösenord"
Det gör ju att jag inte använder tiljas DSN-fil, kan det ha något med det att göra?
@ndersMedlem sedan juni 200026 914 inlägg
Det gör ju att jag inte använder tiljas DSN-fil, kan det ha något med det att göra?
Nej, det har jag svårt att tänka mig.
Jag funderar vidare...
Mvh,
------------------
http://free.webforum.nu/wf/Forum1/HTML/004053.html
GrummelMedlem sedan juni 200098 inlägg
Vad är det som inte är bra med att använda .addnew? Prestanda?
------------------
*Fingrarna i kors*
VideMedlem sedan dec. 19996 094 inlägg
Ja, visst finns det tillfällen då .addnew kan vara bra, men oftast räcker det med en riktig "Insert" via SQL.
Grejen med .addnew är att du först måste hämta ett recordset ifrån databasen, och det är ju att ta ett steg extra för att lägga till, bättre då att direkt lägga till. :)
------------------
Jag invecklar utvecklande