Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM user where uname='"&user&"'"
Set RS = conn.execute(SQL)
if rs.bof and rs.eof then
RS.AddNew
RS("uname") = user
RS("password") = password1
RS("fname") = fname
RS("sname") = sname
RS("city") = bor
RS.Update
RS.Close
Conn.Close
else
response.redirect("registrera2.asp?error=3")
end if
%>
jag får felmedelande
Feltyp:
ADODB.Recordset (0x800A0CB3)
Aktuellt Recordset kan inte uppdateras. Det kan bero på en begränsning av providern eller den valda låstypen.
det finns ett bättre sätt med INSERT INTO, men jag kommer förbbannat inte ihåg hur strängen skall se ut.. nån som kan påminna mej lite
nått i denna stil
SQL = "Insert into user where username='"&username&"'"
men jag fr d inte att fungera! =/
Engine^Medlem sedan dec. 20003 887 inlägg När du vill uppdatera ett recordset med .Update() måste du först öppna det med LockType 2, 3 eller 4, eftersom default är adLockReadOnly (1). Exempelvis för dig så blir det
RS.Open strSQL, conn, , 2
Då kan du använda dig av .Update()
Om du istället väljer att köra med en INSERT (vilket jag rekommenderar i det här läget) kan det se ut såhär
SQL = "INSERT INTO user (uname, password, fname, sname, city) VALUES " & _
"(' " & user & "'" & _
", '" & password1 & "'" & _
", '" & fname & "'" & _
", ''" & sname & "'" & _
", '" & bor & "')"
conn.Execute SQL, , 128
När du tilldelar dina variabler user, password1 osv, så hoppas jag att du ser till att göra en
Replace([i]variabel[/i], "'", "''")
Så att du inte råkar ut för elakheter.
@ndersMedlem sedan juni 200032 969 inlägg Du kan inte öppna ett recordset på det sättet om du ska lägga till data. Du måste använda en annan cursortyp / låstyp.
Och ja, det är bättre att göra INSERT. Exempel:
strSQL = "INSERT INTO user (uname, password, fname, sname, city) VALUES ('" & user & "', '" & password1 & "', '" & fname &"', '" & sname & "', '" & bor & "')"
Du bör dock byta namn på tabellen user och fältet password, då dessa ord är reserverade av ODBC, och kan skapa felmeddelanden.
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access] Operationen måste använda en fråga som kan uppdateras.
<!--#include file="dbconn.asp" -->
<%
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM user where uname='"&username&"'"
Set RS = conn.execute(SQL)
if rs.bof and rs.eof then
SQL = "Insert Into user(uname, password, fname, sname, city) Values ('"&username& "', '"&password&"','"&fname&"','"&sname& "','"& bor &"')"
Set RS = conn.execute(SQL)
else
response.redirect("registrera2.asp?error=3")
end if
atraMedlem sedan nov. 200355 inlägg sorry that i am interruppting guys=)
denna kod fungerar bättre!=)
<!-- #include file="adovbs.inc" -->
<% Session.LCID = 1053 %>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/db1.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "Select * From medlemmar"
RecSet.Open Addera, Conn, 3, 3
RecSet.ADDNEW
RecSet("namn") = Request.Form("namn")
RecSet("efternamn") = Request.Form("efternamn")
RecSet("username") = Request.Form("anvandarnamn")
RecSet("losen") = Request.Form("losen")
RecSet("epost") = Request.Form("epost")
RecSet("datum") = Now()
RecSet("status") = "offline"
RecSet("alder") = Request.Form("alder")
RecSet("poang") = RecSet("poang")+10
RecSet("lan") = Request.Form("lan")
RecSet("reggad") = Now()
RecSet("ip") = Request.ServerVariables("REMOTE_ADDR")
RecSet("kon") = Request.Form("kon")
RecSet("land") = Request.Form("land")
RecSet.Update
RecSet.Close
Conn.Close
Set RecSet= nothing
Set conn = nothing
Session("meddelande") = "Du är nu reggad! Testa o logga in!."
Response.Redirect "default.asp"
%>
atraMedlem sedan nov. 200355 inlägg inte bara att du har valt fel sätt(enligt mig) att skriva in te databasen testa mitt så funkar d säkert!=) men sen så har du glömt att adda adovbs.inc tror ja
PeeerMedlem sedan mars 20025 907 inlägg Lägger man in data direkt med en insert så behövs inget recordset skapas. Därför behöver du inte heller inkludera adovbs.inc.
Jag skulle definitivt köra på Engine^ och @nders kod.
@ndersMedlem sedan juni 200032 969 inlägg Tilläggas bör, att man behöver aldrig inkludera adovbs.inc. Antingen använder man konstanternas värden direkt i koden, eller så definierar man de få konstanter man verkligen använder direkt i koden.
Det finns ingen anledning att inkludera en mastodontfil helt i onödan.
Mvh
MeleaMedlem sedan juli 20033 147 inlägg Jao, kör Engine^ och @nders kod, den är 10 ggr snabbare :h
WickmarkMedlem sedan juli 2003162 inlägg
Melea skrev:
Jao, kör Engine^ och @nders kod, den är 10 ggr snabbare :h
Men då måste du radera alla enkla citattecken ( ' ), annars crashar skriptet.
SebbeMedlem sedan jan. 20032 285 inlägg
Wickmark skrev:
Men då måste du radera alla enkla citattecken ( ' ), annars crashar skriptet.
Eller så byter du ut alla ' så att det blir två stycken istället (' ').
WickmarkMedlem sedan juli 2003162 inlägg
Sebbe skrev:
Wickmark skrev:
Men då måste du radera alla enkla citattecken ( ' ), annars crashar skriptet.
Eller så byter du ut alla ' så att det blir två stycken istället (' ').
Japp, men risken är (om man skriver på engelska) att orden ser lite konstiga ut.
exempel
don't -> don''t
it's -> it''s
that's -> that''s
eller svenska namn som:
Kalle's -> Kalle''s
Sebastian's -> Sebastian''s
PeeerMedlem sedan mars 20025 907 inlägg Nopp!
Att du skriver 2st ' gör bara så att inte sql-frågan ska krascha (sql-injections), dock lagras det bara 1 ' i databasen. Om du istället kör på din varitan (och plockar bort ') då blir en del ord lite konstiga ja.
atraMedlem sedan nov. 200355 inlägg men i aspsidan's forum så står det att man måste adda adovbs.inc
atraMedlem sedan nov. 200355 inlägg iförsig använd @nders kod den såg faktiskt lite bättre ut!=)
atraMedlem sedan nov. 200355 inlägg men vad menar ni med att koden kommer att krascha???
MacceMedlem sedan apr. 2001425 inlägg atra> ett apostroftecken betyder att det du ska lägga in i dbn slutar där... då kommer IIS försöka tolka resten av strängen som en sql-anrop vilket naturligtvis ger ett fel...
kör funktionen nedan innan du lagrar i db...
Function FixForDb(ByVal strData)
IF NOT Len(Trim(strData))<1 Then
strData = Replace(strData,"'","''")
strData = Replace(strData & " ","|","")
END IF
FixForDb = strData
End Function
atraMedlem sedan nov. 200355 inlägg aha oki tack för hjälpen då vet vi!=)