webForumDet fria alternativet

fel på min databas kod! :(

ASP

16 svar · 348 visningar · startad av M.Cheraghi

Medlem sedan juli 20015 107 inlägg
Frågan#1

ADODB.Recordset (0x800A0BB9)
Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt.
/weborg/do_login.asp, line 11

<%
user = request.form("usern")
pass = request.form("passw")

Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databaser/members.mdb")&";"
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM members where username=user AND password=pass"

RS.Open SQL, Conn, adOpenStatic, adLockOptimistic 

%>

rad 11 som felet ligger på är "RS.Open SQL, Conn, adOpenStatic, adLockOptimistic " har trixat å knåpat ett tag nu, men kan inte lösa det,... hjärn släpp!

MVH

Medlem sedan feb. 20011 498 inlägg
#2
<%
user = request.form("usern")
pass = request.form("passw")

Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databaser/members.mdb")&";"
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM members where username='"&user&"' AND password='"&pass&"'"

RS.Open SQL, Conn, adOpenStatic, adLockOptimistic 

%>
Medlem sedan juli 20015 107 inlägg
#3

:r ojdå! hehe... tack så mycket ampy!

Medlem sedan juli 20015 107 inlägg
#4

men hmm.... jag får fortfarande upp

ADODB.Recordset (0x800A0BB9)
Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt.
/weborg/do_login.asp, line 11

när jag kör med koden som ampy gjorde! :l

Medlem sedan dec. 200012 464 inlägg
#5

Dom här då

adOpenStatic, adLockOptimistic

är dom definierade?

sen så bör du göra

user = replace(request.form("usern"),"'","''")
pass = replace(request.form("passw"),"'","''")
Medlem sedan juli 20015 107 inlägg
#6

LarsG skrev:

Dom här då

adOpenStatic, adLockOptimistic

är dom definierade?

sen så bör du göra

user = replace(request.form("usern"),"'","''")
pass = replace(request.form("passw"),"'","''")

deifinerade? hahaha, jadu jag har inte den blekaste :r
okej jag ska testa o ändra d där!

men förut hade jag inte. "RS.open", då hade jag typ

"SET RS.execute(sql)"

men mins inte hur man skulle skriva det..

Medlem sedan juli 20015 107 inlägg
#7

okej, nu fungerade det när jag tog bort "adOpenStatic, adLockOptimistic " från koden! kan nån vara bussig o tala om vad "adOpenStatic, adLockOptimistic " innebär.. verkar vara en konstig kodbit :P

Tack

Medlem sedan dec. 200012 464 inlägg
#8

Det finns ingen anledning att byta till rs.open om du bara skall hämta data.

adOpenStatic, adLockOptimistic definieras normalt i en fil som heter adovbs.inc och anger hur recordsetet öppnas, om man tillåter att förändring sker eller inte.

Om man inte vill inkludera denna fil så kan man själv de de konstanter som man faktiskt använder

const adOpenStatic = 3
const adLockOptimistic = 3

Medlem sedan juli 20015 107 inlägg
#9

Istället för att skapa en ny tråd, så åter andvänder jag denna :P
i min do_login.asp har jag lagt till funktionen datediff, för att kolla av om fältet "online" är över 5 minuter gammalt, men nått går knas å vill inte fungera..

ADODB.Field (0x80020009)
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.
/weborg/do_login.asp, line 26

<%
user = replace(request.form("usern"),"'","''")
pass = replace(request.form("passw"),"'","''")

Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databaser/members.mdb")&";"
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM members where username='"&user&"' AND password='"&pass&"'"
RS.Open SQL, Conn, 3, 3

If rs.bof and rs.eof then

	response.write("nä, hittade inget")
else

[b]Do Until RS.EOF

	If RS("status") = "online" AND DateDiff("n", RS("online"), Now) > 5 Then
		RS("status") = "offline"
		RS.Update
	End If
	
RS.MoveNext
Loop[/b]

	Session("user") = RS("username")
	session("id") = RS("id")

		RS("status") = "online"
		RS("online") = now
		RS.Update

end if

rs.close
conn.close
%>
Medlem sedan juli 20015 107 inlägg
#10

Det löste sej, ändrade nästan hela sidan, tänkte helt fel :P

Medlem sedan dec. 200012 464 inlägg
#11

Du kan inte lägga detta

RS("status") = "online"
RS("online") = now

efter loopen eftersom du redan då har kommit till slutet.

Varför har du en loop överhuvudtaget? Username är väl unikt?

If rs.bof and rs.eof then

	response.write("nä, hittade inget")
else
	Session("user") = RS("username")
	session("id") = RS("id")

		RS("status") = "online"
		RS("online") = now
		RS.Update
end if

Det finns heller ingen anledning att sätta någon offline eftersom du sätter den till online direkt efter.

Medlem sedan juli 20015 107 inlägg
#12

hehehehe.... jag kom på det själv... detta e den nya koden som jag gjorde... fungerar alldeles utmärkt! tummen upp!!

<%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databaser/members.mdb")&";"
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM members"
RS.Open SQL, Conn, 3, 3

Do Until RS.EOF

	If RS("status") = "online" AND DateDiff("n", RS("online"), Now) > 5 Then
		RS("status") = "offline"
		RS.Update
	End If
	
RS.MoveNext
Loop

RS.Close

RS.Open SQL, Conn, 3, 3
Do Until RS.EOF

IF Request.Form("usern") = RS("username") And Request.Form("passw") = RS("password") Then

	Session("user") = RS("username")
	session("id") = RS("id")

		RS("status") = "online"
		RS("online") = now
		RS.Update

		Response.Redirect "default.asp"
	END IF
RS.movenext
loop
rs.close
conn.close
Response.Redirect "login.asp?vad=error"
%>
Medlem sedan juli 20015 107 inlägg
#13

lite loopar o grejer, men lixom, det fungerar, inte så high på vad det gäller ASP längre, har inte hållt på med det sen mer än 1 år hehe.. så liiiite rostig e man... men d e smällar man får ta =)

Medlem sedan juli 20015 107 inlägg
#14

ere nån mer än jag som tycker att min nya kod e liiite skev? den fungerar alldeles utmärkt! men d känns konstigt att loopa

"Session("user") = RS("username")
session("id") = RS("id")"

nån som kan modda koden lite så den ser lite cleanare ut på nå sätt, för d känns onödigt att loopa session grejen..

Medlem sedan mars 20015 287 inlägg
#15

Varför stänga RS för att sen öppna igen?

RS.movefirst

Det du gör är att sätta ALLA offline om dom inte loggat in under de senaste fem minutrarna, är det rätt uppfattat?
Om det är så, har du någon anna ncheck någonstans som ser till att "hålla" dom online?

Medlem sedan juli 20015 107 inlägg
#16

solbulle skrev:

Varför stänga RS för att sen öppna igen?

RS.movefirst

Det du gör är att sätta ALLA offline om dom inte loggat in under de senaste fem minutrarna, är det rätt uppfattat?
Om det är så, har du någon anna ncheck någonstans som ser till att "hålla" dom online?

ja det har jag, väl inne på sidan så kommer det finnas en frame som visar vilka som e anslutna, och den kommer refresha var 3:e minut, men jag ska ändra datediff till 20 min! har satt till fem nu, för att slippa vänta 20 min för att kolla om det fungerar =) hehe

ska kolla på RS.Movefirst när jag kommer hem!
nu måste jag till skolan! och laga ett nätagg, en dockstation och ett labrationskort, som vi lyckades bränna sönder igår hehe..

Medlem sedan mars 20015 287 inlägg
#17

Oki, då är jag med. :)

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)