S Sammy Medlem sedan maj 2000 202 inlägg Frågan 5 juli 2002 12:53 #1 Vad är det för fel på den här "koden"?
<%
Set Connect = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("gbkif.mdb")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
Set RStemp = Connect.Execute("SELECT * FROM gastbok")
RStemp.Addnew
RStemp("namn")=Request.Form("namn")
RStemp("epost")=Request.Form("epost")
RStemp("inlagg")=Request.Form("inlagg")
RStemp.Update
Connect.close
Set Connect = nothing
Response.redirect "default.asp"
%>
Jag får felmeddelandet:
Aktuellt Recordset kan inte uppdateras. Det kan bero på en begränsning av providern eller den valda låstypen.
/test/gb_spara.asp, line 11
när jag försöker spara/uppdatera min 'gästbok'?
Line 11 = RStemp.Update
Vad gör jag för fel? Tacksam för svar!
S SPiN Medlem sedan mars 2000 7 896 inlägg Gör så här i stället:
Byt ut följande rader:
Set RStemp = Connect.Execute("SELECT * FROM gastbok")
RStemp.Addnew
RStemp("namn")=Request.Form("namn")
RStemp("epost")=Request.Form("epost")
RStemp("inlagg")=Request.Form("inlagg")
RStemp.Update
Mot:
Connect.Execute( "INSERT INTO Gastbok (namn, epost, inlagg) VALUES('" & Request.Form( "namn" ) & "', '" & Request.Form( "epost" ) & "', '" & Request.Form( "inlagg" ) & "'" )
Då sköter du allt med SQL:en istället, vilket blir effektivare och snyggare.
toha Medlem sedan dec. 1999 707 inlägg Testa att ändra LockType för recordset:et till adLockOptimistic (3):
...
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
Set RStemp = Connect.Execute("SELECT * FROM gastbok")
RSTemp.LockType = 3 ' adLockOptimistic
...
Du kanske måste köra sql-frågan på ett recordset-objekt och ställa in locktype:n vid Open()-metoden (4:e parametern). Dvs:
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM gastbok", "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";", , 3
S Sammy Medlem sedan maj 2000 202 inlägg Aha.. det var ju också en variant.. tack för ditt snabba svar..
Testade och fick åter på nytt ett felmeddelande?
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i INSERT INTO-uttryck.
/test/gb_spara.asp, line 6
O OveRRidE Medlem sedan feb. 2001 12 078 inlägg Du kan inte använda metoden addnew på recordsetobjektet om du inte öppnar med en annan cursortype.
Set RsTemp = Server.CreateObject("ADODB.Recordset")
Set Connect = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("gbkif.mdb")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQL = "SELECT * FROM gastbok"
RStemp.Open SQL, Connect, adOpenStatic, adLockOptimistic
S skyman Medlem sedan juli 2001 2 450 inlägg Funkar det om du gör såhär:
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("gbkif.mdb")
toha Medlem sedan dec. 1999 707 inlägg
Då sköter du allt med SQL:en istället, vilket blir effektivare och snyggare.
Kan INTE hålla med. Effektivare - javisst, men absolut inte snyggare. Dessutom måste man parse:a alla request:en.
L LarsG Medlem sedan dec. 2000 12 464 inlägg Connect.Execute "INSERT INTO Gastbok (namn, epost, inlagg) VALUES('" & Request.Form( "namn" ) & "', '" & Request.Form( "epost" ) & "', " & Request.Form( "inlagg") & ")"
Hur det skall se ut beror på vilka datatyper du har. Jag gissar att innlagg är numeriskt.
S SPiN Medlem sedan mars 2000 7 896 inlägg
Kan INTE hålla med. Effektivare - javisst, men absolut inte snyggare. Dessutom måste man parse:a alla request:en.
Tja, smaken är som baken. Jag tycker att det blir snyggare med SQL-varianten. :)
S Sammy Medlem sedan maj 2000 202 inlägg
Hur det skall se ut beror på vilka datatyper du har. Jag gissar att innlagg är numeriskt.
Nej.. det är ren text (PM) eftersom det är inlägget besökaren skriver i gästboken?
Vad har det för betydelse på själva sql-satsen?
S skyman Medlem sedan juli 2001 2 450 inlägg
Sammy skrev:
Vad har det för betydelse på själva sql-satsen?
Om det är text (char) så ska det vara enkelfnuttar (') runt uttrycket som de övriga...
Connect.Execute "INSERT INTO Gastbok (namn, epost, inlagg) VALUES('" & Request.Form( "namn" ) & "', '" & Request.Form( "epost" ) & "', '" & Request.Form( "inlagg") & "')"
L LarsG Medlem sedan dec. 2000 12 464 inlägg Connect.Execute "INSERT INTO Gastbok (namn, epost, inlagg) VALUES('" & Request.Form( "namn" ) & "', '" & Request.Form( "epost" ) & "', '" & replace(Request.Form( "inlagg"),"'","''") & "')"
I så fall skall det vara apostrofer kring värdet. Sen så bör man, av säkerhetsskäl, byta alla förekomster av ' till ''