webForumDet fria alternativet

Databas problem

18 svar · 390 visningar · startad av M.Cheraghi

M.CheraghiMedlem sedan juli 20015 107 inlägg
#1
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
#2

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
#3

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.

Cannabis_TomtenMedlem sedan juli 20015 107 inlägg
#4

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
@ndersMedlem sedan juni 200032 969 inlägg
#5

Länk 1

därmed:

Länk 2

atraMedlem sedan nov. 200355 inlägg
#6

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
#7

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
#8

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
#9

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
#10

Jao, kör Engine^ och @nders kod, den är 10 ggr snabbare :h

WickmarkMedlem sedan juli 2003162 inlägg
#11

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
#12

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
#13

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
#14

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
#15

men i aspsidan's forum så står det att man måste adda adovbs.inc

atraMedlem sedan nov. 200355 inlägg
#16

iförsig använd @nders kod den såg faktiskt lite bättre ut!=)

atraMedlem sedan nov. 200355 inlägg
#17

men vad menar ni med att koden kommer att krascha???

MacceMedlem sedan apr. 2001425 inlägg
#18

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
#19

aha oki tack för hjälpen då vet vi!=)

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