webForumDet fria alternativet

Vad är fel?

ASP

11 svar · 418 visningar · startad av Sammy

Medlem sedan maj 2000202 inlägg
Frågan#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!

Medlem sedan mars 20007 896 inlägg
#2

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.

Medlem sedan dec. 1999707 inlägg
#3

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
Medlem sedan maj 2000202 inlägg
#4

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

Medlem sedan feb. 200112 078 inlägg
#5

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
Medlem sedan juli 20012 450 inlägg
#6

Funkar det om du gör såhär:
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("gbkif.mdb")

Medlem sedan dec. 1999707 inlägg
#7

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.

Medlem sedan dec. 200012 464 inlägg
#8
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.

Medlem sedan mars 20007 896 inlägg
#9

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. :)

Medlem sedan maj 2000202 inlägg
#10

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?

Medlem sedan juli 20012 450 inlägg
#11

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")  & "')"
Medlem sedan dec. 200012 464 inlägg
#12
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 ''

260 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)