[ASP]ADODB recordset error

Pagina: 1
Acties:
  • 917 views sinds 30-01-2008
  • Reageer

  • Fatalharry
  • Registratie: Juni 2001
  • Laatst online: 25-08 18:57
Ben bezig met een aanmeld script voor een webpagina.
heb al wat gegevens handmatig in de database gezet, en als ik deze gebruik, kan ik via een inlogpagina inloggen, allemaal prachtig.

maar via dit script wil ik dat gebruikers zichzelf kunnen aanmelden, maar ik krijg de data niet naar de database, in de volgende code zit de fout:

ADODB.Recordset error '800a0bb9'

De argumenten zijn van het verkeerde type, vallen buiten het toegestane bereik of zijn in conflict met elkaar.

/temp/checkform.asp, line 63


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub saveit 
'maak een nieuwe Active Data Object connectie 
set conn = server.createobject("ADODB.RecordSet") 
'open de ODBC Systeem DSN 
conn.open dns,"1","2","&H0001"   <------------- Hier dus!!
conn.addnew 
conn("voornaam")=voornaam 
conn("achternaam")=achternaam 
conn("email")=email 
conn("paswoord")=paswoord1 
conn.update 
conn.close 
set conn = Nothing 
header 
response.write "Bedankt voor het registreren! Click <a href='login.asp'>here</a> om terug te keren naar de login pagina." 
end sub


wat doe ik verkeerd??

hierbij ook de volledige code, ik hou van open source :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!-- #include virtual="/temp/secure.asp"-->
<!-- #include file="adovbs.inc" -->

<BODY bgColor=#000000 topMargin=0 style="color: #FFFFFF">
<% 
'creeren variabellen die nodig zijn
DSN= "users"
errors=0 
msg="" 


'data ophalen uit form 
voornaam=request("voornaam") 
achternaam=request("achternaam") 
email=request("email") 
paswoord1=request("paswoord1") 
paswoord2=request("paswoord2") 
  
'kijken of het email adres al in database voorkomt 
if email>"" and oneval("users","select email from gebruikers where lcase(email)='" & trim(lcase(email)) & "'")=trim(lcase(email)) then 
   response.write "Dat e-mail adres bestaat al. Ga terug <a href='lostpass.asp'>Hier</a> en laat uw wachtwoord toemailen." & vbcrlf 
   response.end 
end if 
  
'check elk veld voor validatie en als het niet goed is geef foutmelding
checkit voornaam,"Voornaam moet ingevoerd worden." 
checkit achternaam,"Achternaam moet ingevoerd worden." 
checkit email,"Email Adres  moet ingevoerd worden." 
checkit paswoord1,"Paswoord  moet ingevoerd worden." 
checkit paswoord2,"U moet uw wachtwoord opnieuw invoeren voor verificatie." 
  
'zijn de 2 wachtwoorden hetzelfde? 
if paswoord1<>paswoord2 then 
   errors=errors+1 
   msg=msg & "De 2 wachtwoorden in de velden zijn niet gelijk.<br>" & vbcrlf 
end if 
  
'Is het wachtwoord lang genoeg? 
if len(paswoord1)<5 then 
   errors=errors+1 
   msg=msg & "Uw wachtwoord moet in iedergeval 5 karakters lang zijn.<br>" & vbcrlf 
end if 
  
'nog andere fouten? 
if errors>0 then 
   response.write msg 
   response.write "<br>Klik de Vorige button in uw browser om het opnieuw te proberen " 
   if errors>1 then 
     response.write "" 
   else 
     response.write "deze error." 
   end if 
else 
   saveit 'Data word opgeslagen 
end if 
response.end 
  
  
sub saveit 
'maak een nieuwe Active Data Object connectie 
set conn = server.createobject("ADODB.RecordSet") 
'open de ODBC Systeem DSN 
conn.open dns,"1","2","&H0001" 
conn.addnew 
conn("voornaam")=voornaam 
conn("achternaam")=achternaam 
conn("email")=email 
conn("paswoord")=paswoord1 
conn.update 
conn.close 
set conn = Nothing 
header 
response.write "Bedankt voor het registreren! Click <a href='login.asp'>here</a> om terug te keren naar de login pagina." 
end sub 
%>

  • whoami
  • Registratie: December 2000
  • Nu online
Kijk eens naar de parameters die je met die Open moet meegeven.
Je heeft daar tussen quotes (een string dus) een adres oid mee. Zoek eens of je daar geen andere optie voor hebt (een duidelijke naam oid), of laat die quotes eens weg. (Bij de 3de parameter that is).

Verder, geen fout, maar iets wat ik persoonlijk niet zo mooi/goed vind: Je voegt een record toe door met die AddNew te werken. Persoonlijk vind ik het netter om gebruik te maken van een INSERT query.

https://fgheysels.github.io/


  • El_BingO
  • Registratie: Juli 2001
  • Laatst online: 26-08 12:01
geen " " om de parameters zetten...

edit:

Te laat...
check ook www.devguru.com staat een goede referentie van ADODB

[ Voor 63% gewijzigd door El_BingO op 02-01-2003 20:11 ]


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Je haalt 2 dingen door elkaar.
Je hebt een Connectie en een Recordset.
Connectie is voor de connectie met de database.
En een recordset maak je door een query uit te voeren op de database, bijvoorbeeld een SELECT * FROM
Op een Recordset kun je een AddNew doen.
Wat je ook kunt doen is een INSERT query maken en die dan uit laten voeren door de connectie.

Bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub saveit 
'maak een nieuwe Active Data Object connectie 
Set Conn = Server.CreateObject("ADODB.Connection") 
'open de ODBC Systeem DSN 
Conn.Open dns,"1","2","&H0001" 
strSQL = "INSERT INTO [User] (voornaam, achternaam, email, paswoord1) " _
            & "VALUES ('" & voornaam & "', " _
            & "'" & achternaam & "', " _
            & "'" & email & "', " _
            & "'" & paswoord1 & "')"
Conn.Execute strSQL

Conn.close 
Set Conn = Nothing 
header 
response.write "Bedankt voor het registreren! Click <a href='login.asp'>here</a> om terug te keren naar de login pagina." 
End Sub

  • Fatalharry
  • Registratie: Juni 2001
  • Laatst online: 25-08 18:57
allemaal bedankt voor de mega sneller replies.

robjansen:
ik heb jou code gebruikt, maar nu krijg ik dit:

ADODB.Connection error '800a0e78'

De bewerking is niet toegestaan als het object gesloten is.

/temp/checkform.asp, line 69


het is voor mij al een lange dag proggen geweest en volgens mij moet ik nu stoppen maar hoe krijg ik hem dan open?

  • El_BingO
  • Registratie: Juli 2001
  • Laatst online: 26-08 12:01
fatalharry schreef op 02 January 2003 @ 20:15:
allemaal bedankt voor de mega sneller replies.

robjansen:
ik heb jou code gebruikt, maar nu krijg ik dit:

ADODB.Connection error '800a0e78'

De bewerking is niet toegestaan als het object gesloten is.

/temp/checkform.asp, line 69


het is voor mij al een lange dag proggen geweest en volgens mij moet ik nu stoppen maar hoe krijg ik hem dan open?
Volgens mij ligt het dan nog steeds aan de quotes ("").
En inderdaad ook die RecordSet, maar check eens de referentie van adodb, daar staat precies wat je mee moet sturen...

edit:

je kan je post niet deleten...

[ Voor 6% gewijzigd door El_BingO op 02-01-2003 20:18 ]


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Wat staat er precies op regel 69?

  • Fatalharry
  • Registratie: Juni 2001
  • Laatst online: 25-08 18:57
Conn.Execute strSQL

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Je maakt zie ik ook gebruik van een inherente ADO methode om je records bij te werken, zoals whoami ook al zei is het mooier gebruik te maken van de SQL statment INSERT.
(dit is eenvoudiger en een stuk overzichtelijker)
Schilt ook in de performance.(Al zal je er denk niet verschrikkelijk veel van merken, maar toch)

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • Fatalharry
  • Registratie: Juni 2001
  • Laatst online: 25-08 18:57
Is ondertussen aangepast, alleen kan de bewerking niet uitgevoerd worden zolang object gesloten is

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Dan zul je toch echt eerst even een lijntje moeten leggen. ;)

Laat je code tot aan je strSQL eens zien dan

[ Voor 29% gewijzigd door DeverauX op 02-01-2003 21:07 ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • Fatalharry
  • Registratie: Juni 2001
  • Laatst online: 25-08 18:57
huidige
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub saveit 
'maak een nieuwe Active Data Object connectie 
Set Conn = Server.CreateObject("ADODB.Connection") 
'open de ODBC Systeem DSN 
Conn.Open dns,"1","2","&H0001" 
strSQL = "INSERT INTO [User] (voornaam, achternaam, email, paswoord) " _
            & "VALUES ('" & voornaam & "', " _
            & "'" & achternaam & "', " _
            & "'" & email & "', " _
            & "'" & paswoord & "')"
Conn.Execute strSQL
Conn.close 

Set Conn = Nothing 
header 
response.write "Bedankt voor het registreren! Click <a href='login.asp'>here</a> om terug te keren naar de login pagina." 
End Sub

%>

[ Voor 78% gewijzigd door Fatalharry op 02-01-2003 21:11 ]


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

lijntje<-->verbinding ??
Maar zo te zien is er niet veel mis met je code. Probeer anders eens de recordset te openen met een adOpenDynamic Cursor, en een adLockOptimistic.
Kan zijn dat dit werkt.
Of trouwens haal dat maar weg, dus alleen Conn.Open "dsn"

[ Voor 21% gewijzigd door DeverauX op 02-01-2003 21:21 ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • Fatalharry
  • Registratie: Juni 2001
  • Laatst online: 25-08 18:57
devraux:
i ow you 1.

hardstikke bedankt.
ut werkt

nu kan ik eindelijk stoppen.

andere gebruikers ook bedankt voor alle reacties

  • Boudi
  • Registratie: Oktober 2000
  • Laatst online: 09-08 02:32

Boudi

Always Coca Cola

Je vult bovenin je pagina een variabele DSN met de string "Users":
DSN= "users"
en later open je je conn met als parameter de variabele DNS":
Conn.Open dns,"1","2","&H0001"
Bovendien ben ik niet bekend met deze methode om een recordset / connection te openen... wat ik altijd zelf doe:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim MyCon, MyRs

Set MyCon = Server.CreateObject("ADODB.Connection")
Set MyRs = Server.CreateObject("ADODB.RecordSet")

MyCon.Open "DSN-NAAM"

MyRs.Open "tabelnaam in DB"
MyRs.Addnew
MyRs.Fields("veld1") = waarde1
MyRs.Fields("veld2") = waarde2
MyRs.Update
MyRs.Close

MyCon.Close

Set MyRs = Nothing
Set MyCon = Nothing

Met of zonder mayonaise?


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

fatalharry schreef op 02 January 2003 @ 21:37:
nu kan ik eindelijk stoppen.
Nu kan je eindelijk beginnen zal je bedoelen zeker ;)

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones

Pagina: 1