Hej! På raden efter "Do while NOT rs.EOF" där det står rs("EMail") = Där är felet du har inte tilldelat någon variabel värdet på rs. Fredrik: Anna-Karin: Om du med felkontroll menar att jag ska kolla ärendet och textinnehållet så har jag redan ordnat det vilket fungerar bra enligt följande: Har du deklarerat, inkluderat konstanterna adOpenStatic och adLockOptimistic? Ja det har jag, eller, kanske inte deklarerat men inkluderat. wrong number of arguments brukar tyda på att du inte skickar in sql-koden rätt. kan också bero på att du har en lagrad procedur som skall ta emot 4 parametrar men du skickar bara in 3 eller kanske 5. Pelle, varför stänger du inte rdina recordset? Hmm. Hur jag än försöker får jag inte till det.Wrong number of arguments or invalid property assignment: 'rs'
Jag försöker förtvivlat få följande script att dra mailadresser ur databasen och sätta in dem i Mail.To men får följande fel:
Error Type:
Microsoft VBScript runtime (0x800A01C2)
Wrong number of arguments or invalid property assignment: 'rs'
Här är scriptet:
<%
SQL = "SELECT EMail FROM test"
rs.Open SQL, Connection, adOpenStatic, adLockOptimistic
Do while NOT rs.EOF
rs("EMail")
Set Mail = Server.CreateObject("CDONTS.NewMail")
Mail.To = rs("EMail") & ";"
rs.movenext
loop
Mail.From = "mailaddress@example.com"
Mail.Subject = Request.Form("1")
Mail.Body = Request.Form("2")
Mail.Send
response.redirect "mail.asp"
%>
Om jag direkt specar en eller fler adresser separerat med ; så fungerar det alldeles utmärkt, men den vill inte ta min syntax av någon anledning. Det kanske är så enkelt att CDONTS inte kan hantera formatet, men jag är osäker.
Form("1") och Form("2") innehåller ämne och text från sidan som skickas till detta script.
Är det någon som har något tips?
Mvh/MagnusSv: Wrong number of arguments or invalid property assignment: 'rs'
rs("EMail")
alldeles för sig själv... ta bort den raden så kanske det funkar bättre.Sv: Wrong number of arguments or invalid property assignment: 'rs'
Sen skulle jag lägga in lite felkontroll, kolla om RS.EOF innan jag loopar, samma sak med ärendet, kolla att det finns något ärende innan jag loopar.
//Anna-KarinSv:Wrong number of arguments or invalid property assignment: 'rs'
OK. Jag tog bort den raden och nu går scriptet igenom. Problemet är nu att mailet inte kommer fram :o)
Alltid kul att stöta på nya problem när ett annat är löst.Sv:Wrong number of arguments or invalid property assignment: 'rs'
Jag är lite osäker på vad du menar. Kan du ge mig ett litet exempel så jag får mindre otur när jag tänker :o)Sv:Wrong number of arguments or invalid property assignment: 'rs'
<%
If Request.Form("1") = "" Then%>
<center>
<font face="Arial" size="2"><b>Skicka gruppmail</b></font>
<p>
<form name="Send" ACTION="mailsend.asp" target="_self" input type="hidden" METHOD="POST">
<center><b><font face="Arial" size="2" color = "blue">Ämne</font></b></center>
<left><font face="Arial" size="2"><input type="text" value="Inget ämne är angett!" size="52"style="vertical-align: middle; text-align: left" name="1"></font></left>
<center><b><font face="Arial" size="2" color = "blue">Text</font></b></center>
<left><font face="Arial" size="2"><textarea name="2" cols="50" rows="10" wrap="virtual"><%=Request.Form("2")%></textarea></font></left>
<p>
<font face="Arial" size="2">
<input type="submit" value="Skicka">
</font>
</form>
</center>
<%
ElseIF Request.Form("2") = "" Then%>
<center>
<font face="Arial" size="2"><b>Skicka gruppmail</b></font>
<p>
<form name="Send" ACTION="mailsend.asp" target="_self" input type="hidden" METHOD="POST">
<center><b><font face="Arial" size="2" color = "blue">Ämne</font></b></center>
<left><font face="Arial" size="2"><input type="text" value="<%=Request.Form("1")%>" size="52"style="vertical-align: middle; text-align: left" name="1"></font></left>
<center><b><font face="Arial" size="2" color = "blue">Text</font></b></center>
<left><font face="Arial" size="2"><textarea name="2" cols="50" rows="10" wrap="virtual">Texten saknas!</textarea></font></left>
<p>
<font face="Arial" size="2">
<input type="submit" value="Skicka">
</font>
</form>
</center>
<%
Else
SQL = "SELECT EMail FROM test"
rs.Open SQL, Connection, adOpenStatic, adLockOptimistic
Set Mail = Server.CreateObject("CDONTS.NewMail")
Do while NOT rs.EOF
Mail.To = rs("EMail")
rs.movenext
loop
'Mail.Cc = "reciep2"
Mail.From = "noreply@mail.se"
Mail.Subject = Request.Form("1")
Mail.Body = Request.Form("2")
Mail.Send
response.redirect "mail.asp"
End If
End If
%>
Problemet jag nu stöter på verkar vara att det saknas adress för några personer i listan och presenteras det enligt följande om jag kör en check på det:
någon@mail.se; ; en_annan@mail.se
Normalt sett så separerar man ju adressaterna med ett ; mellan varje adress, men om det kommer två ;; eller ; ; så antar jag att CDONTS inte kan hantera det.
Jag skulle egentligen behöva en liten sak som kollar om det finns någonting i alla adressfält och om inte ersätter det med tx. noreply@mail.se
Jag har försökt med lite olika varianter men får inte till det. det blev till och med så att alla adresser jag hade ersattes med noreply@mail.se i samtliga poster. Tur man har backup!
Jag trodde inte att poster ersattes om man inte satte rs.update men jag kanske har fel.
Jag kanske ska tillägga att jag körde en IF-sats för att kolla innehållet enligt följande:
<%
SQL = "SELECT EMail, EMail2 FROM test"
rs.Open SQL, Connection, adOpenStatic, adLockOptimistic
If rs("EMail") = "" Then
rs("EMail") = "noreply@mail.se"
ElseIf rs("EMail2") = "" Then
rs("EMail2") = "noreply@mail.se"
End If
Do while NOT rs.EOF
%>
<%=rs("EMail")%>;
<%=rs("EMail2")%>;
<%
rs.movenext
loop
%>
Resultatet blev som sagt att alla adresser presenterades som noreply@mail.se och ersattes med detta i DB.Sv: Wrong number of arguments or invalid property assignment: 'rs'
Sv:Wrong number of arguments or invalid property assignment: 'rs'
Sv: Wrong number of arguments or invalid property assignment: 'rs'
Sen om det inte finns några poster skall du kolla det med en if-sats innan du försöker nå objekten också, annars kan det med smälla, ex:
<code>
SQL = "SELECT EMail, EMail2 FROM test"
rs.Open SQL, Connection, adOpenStatic, adLockOptimistic
if not rs.eof
If rs("EMail") = "" Then
rs("EMail") = "noreply@mail.se"
ElseIf rs("EMail2") = "" Then
rs("EMail2") = "noreply@mail.se"
End If
end if
Do while NOT rs.EOF
%>
<%=rs("EMail")%>;
<%=rs("EMail2")%>;
<%
rs.movenext
loop
%>
</code>
Sen kan du hoppa över det där med rs.open, testa istället:
<code>
set con = server.createobject("adodb.connection")
con.open "minconnectionsträng"
set rs1 = con.execute("select * from tabell1")
set rs2 = con.execute("select * from tabell2")
set rs1 = nothing
set rs2 = nothing
con.close
set con = nothing
</code>Sv:Wrong number of arguments or invalid property assignment: 'rs'
Borde vara:
Sen kan du hoppa över det där med rs.open, testa istället:
<code>
set con = server.createobject("adodb.connection")
con.open "minconnectionsträng"
set rs1 = con.execute("select * from tabell1")
set rs2 = con.execute("select * from tabell2")
rs1.close
set rs1 = nothing
rs2.close
set rs2 = nothing
con.close
set con = nothing
</code>Sv:Wrong number of arguments or invalid property assignment: 'rs'
Min dbconn inkluderar jag på samtliga filer som ska nå databasen
<!-- #include file="scripts/dbconn.asp" -->
och den ser ut på följande sätt:
<%
Set Connection = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
DSN="DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN=dsn & "DBQ=" & Server.MapPath("../../katalog/databas.mdb")
Connection.Open DSN
%>
Jag försökte enligt Pelles tänk att göra på följande sätt i stället och skrev då direkt på slask.asp som min testsida heter:
<!-- #include file="scripts/adovbs.asp" -->
<%
Set Con = Server.CreateObject("ADODB.Connection")
DSN="DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN=dsn & "DBQ=" & Server.MapPath("../../katalog/databas.mdb")
Con.Open DSN, adOpenStatic, adLockOptimistic
%>
<%
set rs = con.execute("SELECT EMail, EMail2 FROM test")
if not rs.eof Then
If rs("EMail") = "" Then
rs("EMail") = "noreply@mail.se"
ElseIf rs("EMail2") = "" Then
rs("EMail2") = "noreply@mail.se"
End If
End If
Do while NOT rs.EOF
%>
<%=rs("EMail")%>;<br>
<%=rs("EMail2")%>;<br>
<%
rs.movenext
loop
rs.close
set rs = nothing
con.close
set con = nothing
%>
Anledningen till att jag kör med rs och inte rs1, rs2 osv. är att jag ska ju bara öppna poster mot en tabell, men jag tror jag förstår poängen med det.
Resultatet av körningen blir:
;
;
magnus.cederlund@teliasonera.com;
;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
;
;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
swemcd@hotmail.com;
;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
mankan@gof.se;
magnus.cederlund@teliasonera.com;
;
Man ser att det saknas 10 adresser i databasen enligt sidans output, men det stämmer inte eftersom det i databasen endast är 8 adresser som saknas.
man kan även tycka att de adresser som saknas borde ha ersatts med noreply@mail.com enligt ovan, men så har inte skett.
Anledningen till att det är samma adresser som upprepas är att jag kör mot en test-DB och har petat in några av mina adresser, men principen borde ju vara densamma.
Har jag extremt mycket otur när jag tänker nu eller?