Newsgroup: it.comp.www.asp
Titolo: IIS4 non supporta nextrercordset !?

Leggendo alcuni newsgroup esteri su asp - sql etc ho dedotto
sostanzialmente che Nextrecordset non e' supportato da IIS4 a
differenza di IIS3.
Praticamente abbiamo tutto il sito inutilizzabile in quanto tutte le
pagine asp sono impostate con lo scrolling e quindi fanno uso di
nextrecordset.
L'errore e' il seguente:
ADODB.Recordset error '800a0cb3' 
The operation requested by the application is not supported by the
provider. 
L'oggetto incriminato e':   set RS = RS.NextRecordSet
Qualcuno sa dirci come ovviare al problema ?
Qui sotto alleghiamo tutto il codice di una interrogazione asp a
pagine multiple con scrolling sperando che qualcuno ci dia la dritta 
inizio asp --------------
<%
'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
Param = Request.QueryString("Param")
Data = Request.QueryString("Data")
Ditta = Request.QueryString("[Ditta ?]")
Responsabile = Request.QueryString("[Responsabile ?]")
sql = "SELECT UTENTI.ScadenzaAbbonamento, UTENTI.DataInput,
UTENTI.UserName, UTENTI.PASSWORD, UTENTI.IDClienteCONTATORE,
UTENTI.NomeDitta, UTENTI.Englishspoken, UTENTI.GermanSpoken,
UTENTI.FrenchSpoken, UTENTI.Indirizzo, UTENTI.CAP, UTENTI.Citta,
UTENTI.IDPR, UTENTI.IDZona, ZONA.Zona, UTENTI.Telefono,
UTENTI.NumeroFax, UTENTI.Email, UTENTI.Contatto, UTENTI.IDDipendenti,
DIPENDENTI.Dipendenti, DIPENDENTI.Dipendenti_ENG, UTENTI.IDMercati,
MERCATI.Mercati, MERCATI.Mercati_Eng, UTENTI.Messaggio_STAFF_INFOM,
UTENTI.HomePage, UTENTI.DescrizioneItaliano,
UTENTI.DescrizioneEnglish, UTENTI.IDCategoriaMerceologica,
CATEGORIAMerceologica.CategoriaMerceologica, UTENTI.Rating,
UTENTI.RatingIMAGE, UTENTI.CapitaleSociale "
sql = sql & " FROM MERCATI INNER JOIN (DIPENDENTI INNER JOIN (ZONA
INNER JOIN (CATEGORIAMerceologica INNER JOIN UTENTI ON
CATEGORIAMerceologica.IDCategoriaMerceologica =
UTENTI.IDCategoriaMerceologica) ON ZONA.IDZona = UTENTI.IDZona) ON
DIPENDENTI.IDDipendenti = UTENTI.IDDipendenti) ON MERCATI.IDMercati =
UTENTI.IDMercati "
sql = sql & " WHERE (((UTENTI.NomeDitta) Like '%%%" &
Request.QueryString("[Ditta ?]") & "%%%' AND ((UTENTI.Verificato)=1 )
And (UTENTI.Contatto) like '%%%" & Request.QueryString("[Responsabile
?]") & "%%%'))  "
    If cstr(Param) <> "" And cstr(Data) <> "" Then
        sql = sql & " And [" & cstr(Param) & "] = " & cstr(Data)
    End If
	sql = sql & " ORDER BY UTENTI.Nomeditta Desc"
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
Conn.Open "Agemar2"
RS.Open sql, Conn, adOpenKeyset,adLockReadOnly 
if RS.EOF then 
response.redirect("norecords.html")
end if
RS.PageSize = 10 ' Number of rows per page
if Request("Action") = "" Then
      FormAction = "GuidaRicercadiretta.ASP"
else
      Response.Redirect("GUIDAsearch.cfm")
end if
ScrollAction = Request("ScrollAction")
if ScrollAction <> "" Then
      PageNo = mid(ScrollAction, 5)
      if PageNo <  1 Then 
           PageNo = 1
      end if
else
      PageNo = 1
end if
RS.AbsolutePage = PageNo
PageTot = Rs.Pagecount
%>
<%
RecTot = rs.recordcount
      RowCount = rs.PageSize
	  RecParz = PageNo*RowCount
      %>
<HTML>
<HEAD><TITLE>UTENTI Lista Semplice Nomi</TITLE></HEAD>
<BODY BGCOLOR="#FFFFff">
<head><title>Materiali trovati</title></head>
<body bgcolor="#FFFFcc">
<font size="2" face="Verdana, Tahoma, Arial, helvetica"
color="#000000">Sono state trovate nr <B>*<%=RecTot%>*</B> Aziende in
base ad i seguenti criteri:<br>
<font size="2" face="Verdana, Tahoma, Arial, helvetica"
color="#000000">Ragione Sociale digitata:<B>*<%=Ditta%>*</B><br>
<font size="2" face="Verdana, Tahoma, Arial, helvetica"
color="#000000">Nominativo digitato:<B>*<%=Responsabile%>*</B><br>
<hr>
<FORM METHOD=GET ACTION="<%=FormAction%>">
<%  
Do while not (RS is nothing)  %>
<table>          
<THEAD>
<caption><P ALIGN="RIGHT"><FONT FACE="Verdana, Tahoma, Arial,
helvetica" COLOR="#000000">
<B>Lingue parlate</B></P>
</caption>
<TR>
<TH BGCOLOR="#000000" BORDERCOLOR="#000000"><FONT SIZE=2
FACE="Verdana, Tahoma, Arial, helvetica"
COLOR="#ffffff">Updated</FONT></TH>
<TH BGCOLOR="#000000" BORDERCOLOR="#000000"><FONT SIZE=2
FACE="Verdana, Tahoma, Arial, helvetica"
COLOR="#ffffff">Descrizione</FONT></TH>
<TH BGCOLOR="#000000" BORDERCOLOR="#FFFFFF"><IMG SRC="../FlagUK.gif"
BORDER=0 ALT="English Spoken Company"></TH>
<TH BGCOLOR="#000000" BORDERCOLOR="#FFFFFF"><IMG SRC="../FlagDEUT.gif"
BORDER=0 ALT="Deutsch Spoken Company"></TH>
<TH BGCOLOR="#000000" BORDERCOLOR="#FFFFFF"><IMG
SRC="../FlagFRANCE2.gif" BORDER=0 ALT="French Spoken Company"></TH>
</TR>
</THEAD>
 
	    <%  
		RecTot = rs.recordcount
      RowCount = rs.PageSize
	  RecParz = PageNo*RowCount
      Do While Not RS.EOF and rowcount > 0
	    %>
		<TBODY>
<TR VALIGN=TOP>
<TD BORDERCOLOR="#c0c0c0"><FONT SIZE=2 FACE="Verdana, Tahoma, Arial,
helvetica" COLOR="#000000"><B>Cod.
<%=rs.Fields("Idclientecontatore").Value%></B>&nbsp;&nbsp;
<BR>
<BR>
<FONT SIZE=1 FACE="Verdana, Tahoma, Arial, helvetica"
COLOR="#000000"><%=rs.Fields("DataInput").Value%></TD>
<TD BORDERCOLOR="#c0c0c0"><FONT SIZE=3 FACE="Verdana, Tahoma, Arial,
helvetica"
COLOR="#000000"><B><%=rs.Fields("NomeDitta").Value%></B></FONT>
<BR><FONT SIZE=2 FACE="Verdana, Tahoma, Arial, helvetica"
COLOR="#000000"><%=rs.Fields("INDIRIZZO").Value%>
<BR><%=rs.Fields("CAP").Value%>-<%=rs.Fields("Citta").Value%>&nbsp;<B>(<%=rs.Fields("IDPR").Value%>)</B>&nbsp;&nbsp;Paese:&nbsp;<B><%=rs.Fields("zona").Value%></B>
<BR>Telefono: <%=rs.Fields("telefono").Value%>&nbsp;&nbsp;Fax:
<%=rs.Fields("NumeroFax").Value%>
<BR>E-mail:&nbsp;<a
href="/wwwGUIDA/SendMail.CFM?UTENTI__IDClienteCONTATORE=<%=rs.Fields("Idclientecontatore").Value%>"><%=rs.Fields("email").Value%></a>
<BR>Home page:&nbsp;<a
href="http://<%=rs.Fields("HomePage").Value%>"><%=rs.Fields("Homepage").Value%></a>
<BR>
<BR>Responsabile/i
commerciale:&nbsp;<B><%=rs.Fields("contatto").Value%></B>
<br><BR>
<FONT SIZE=2 FACE="Verdana, Arial" COLOR="#000000">Mercati di
riferimento:&nbsp;<B><%=rs.Fields("MERCATI").Value%></B></FONT>
<BR><br>
<FONT SIZE=2 FACE="Verdana, Tahoma, Arial, helvetica"
COLOR="#000000"><B>Italiana:</B>&nbsp;<%=rs.Fields("DescrizioneItaliano").Value%></FONT>
</TD>
<TD align=center>
<FONT SIZE=2 FACE="Verdana, Tahoma, Arial, helvetica" COLOR="#000000">
<%=rs.Fields("EnglishSPOKEN").Value%>
</TD>
<TD align=center>
<FONT SIZE=2 FACE="Verdana, Tahoma, Arial, helvetica" COLOR="#000000">
<%=rs.Fields("GermanSPOKEN").Value%>
</TD>
<TD align=center>
<FONT SIZE=2 FACE="Verdana, Tahoma, Arial, helvetica" COLOR="#000000">
<%=rs.Fields("FrenchSPOKEN").Value%>
</TD>
</TR>
<tr>
<td bgcolor="#ffccoo" colspan=5>.</td>
</tr>
            <%
 
RowCount = RowCount - 1
Rs.MoveNext
      Loop
      %>
</TBODY>
<TFOOT></TFOOT>
</TABLE>
       <%
      set RS = RS.NextRecordSet
Loop
Conn.Close
set rs = nothing
set Conn = nothing
%>
 
<FONT SIZE=2 FACE="Verdana, Tahoma, Arial, helvetica" COLOR=#000000>
Qui siamo a Pagina <%=PageNo%> di <%=PageTot%>
<P>
<INPUT TYPE="HIDDEN" NAME="[Ditta ?]" VALUE="<%=Ditta%>">
<INPUT TYPE="HIDDEN" NAME="[Responsabile ?]"
VALUE="<%=Responsabile%>">
<input type="hidden" name="counter" value=<%=counter%>>
 
<INPUT TYPE="HIDDEN" NAME="sql" VALUE="<%=sql%>">
<%  if PageNo > 1 Then %>
<%  end if %>
<INPUT TYPE="SUBMIT" NAME="ScrollAction" VALUE="<%="Page " &
PageNo-1%>">
<br>
<br>
<%  if RowCount = 0 Then %>
<INPUT TYPE="SUBMIT" NAME="ScrollAction" VALUE="<%="Page " &
PageNo+1%>">
<%  end if %>
<%  if RecTot-RecParz > 10  Then %>
<INPUT TYPE="SUBMIT" NAME="ScrollAction" VALUE="<%="Page " &
PageNo+2%>">
<%  end if %>
<%  if RecTot-RecParz > 20  Then %>
<INPUT TYPE="SUBMIT" NAME="ScrollAction" VALUE="<%="Page " &
PageNo+3%>">
<%  end if %>
<%  if RecTot-RecParz > 30  Then %>
<INPUT TYPE="SUBMIT" NAME="ScrollAction" VALUE="<%="Page " &
PageNo+4%>">
<%  end if %>
<%  if RecTot-RecParz > 40  Then %>
<INPUT TYPE="SUBMIT" NAME="ScrollAction" VALUE="<%="Page " &
PageNo+5%>">
<%  end if %>
<%  if RecTot-RecParz > 50  Then %>
<INPUT TYPE="SUBMIT" NAME="ScrollAction" VALUE="<%="Page " &
PageNo+6%>">
<%  end if %>
<INPUT TYPE="SUBMIT" NAME="Action" VALUE="Nuova Ricerca">
</FORM>
</BODY>
</HTML>

Io per fare le pagine che mostrassero dei risultati di una query divisi in
10-15 per pagina senza dover rifare la query tutte le volte facevo così:
la prima volta facevo la query e salvavo il risultato (il recordset) come
oggetto Session...
Poi utilizzavo le proprietà PageSize e AbsolutePage per muovermi tra le
"pagine" del recordset..
ecco un esempio:
nPageTo=1;  // la prima volta imposto la pagina che devo vedere a 1
if(Request("page")=="no")        // dalla form di ricerca passo il parametro
?page=no per dire che è la
                                                       // prima volta che
uso questi parametri di ricerca
 {
 Conn=Server.CreateObject("ADODB.Connection");
 Conn.Open(Session("DBConn"));
 SQLstr="select 
articoli.id
 as art_id, articoli.titolo, gare.data,
gare.luogo, gare.nazione, gare.disciplina, categorie.nome "
  +"from gare, articoli, categorie where (articoli.testo LIKE
'%"+Request("word")+"%' or articoli.titolo LIKE '%"+Request("word")+"%') and
gare.sesso='"+Request("sesso")+"' and  
gare.id
=articoli.id_gara and
articoli.id_cat=
categorie.id
";
 //Response.Write(SQLstr);
 result=Server.CreateObject("ADODB.Recordset");
 result.Open(SQLstr,Conn,adOpenKeyset,adLockReadOnly)
 result.PageSize=Request("RpP");            // imposto la Lunghezza della
pagina
 Session("result")= result;                            // metto il recordset
nella Session dell'utente
 }
else
 {
 nPageTo=new Number(Request("PageTo"));        // se invece sto scorrendo le
pagine associo ora pagina
// che mi interessa
 }
result=Session("result");                                // ora "riprendo"
il recrodset
if (result.RecordCount==0)                            // visualizzo delle
pagine diverse se ho 0 risultati
 {
 Response.Redirect("error.asp?sex="+sex);
 result.Close();
 Conn.Close();
 }
else if (result.RecordCount==1)                // un risulato
 {
 Response.Redirect("article.asp?id="+result("art_id"));
 }
else
//oppure più di un risultato
 {
 result.AbsolutePage=nPageTo;                            // ora dico al
recordset in che pagina mi trovo
%>
// Qui scrivo la pagina normalmente
<!--Pagina da visulizzare in caso di più record nella ricerca -->
<html>
<head><title> </title></head>
<body bgcolor="#FFFFFF">
<center>
<table cellpadding=0 cellspacing=0 border=0 width=600 border=0>
<tr><td>
<br>
<br>
<%
// qui imposto le variabili che dicono quanti e quali record devo scrivere
in questa pagina
inizio=(nPageTo*result.PageSize)-result.PageSize+1;
fine=nPageTo*result.PageSize;
if(fine>result.RecordCount)
 fine=result.RecordCount;
%>
<font face=arial>
<font size=-1>Your search produced <b><%=result.RecordCount%></b> results
<%
if (result.RecordCount>result.PageSize)
 {
%>
&nbsp;&nbsp;&nbsp;Here showing only records <b><%=inizio%> to <%=fine%></b>
<%
 }
%>
</font><center>
<table cellpadding=3 cellspacing=0 border=1 width=600>
<tr bgcolor="#FFFF80"><td><strong><font face="Arial"
size="-1">Title</font></td><td><strong><font face="Arial"
size="-1">Date</font></td><td><strong><font face="Arial"
size="-1">Site</font></td><td></strong><strong><font face="Arial"
size="-1">Discipline</font></td></tr>
<%
nRowCount=result.PageSize;
while(!result.EOF && nRowCount>0)        // controllo che il recordset non
sia finito o che sia arrivato al limte
                                                                       // di
righe per la pagina
 {
%>
<tr>
<td><font face=arial size=-1><a
href="article.asp?id=<%=result("art_id")%>"><%=result("nome")%> -
<%=result("titolo")%></a></td>
<td><font face=arial size=-1><%=dataEstesa(result("data"))%></td>
<td><font face=arial size=-1><%=result("luogo")%>
(<%=result("nazione")%>)</td>
<td><font face=arial size=-1><%=result("disciplina")%></td>
</tr>
<%
 nRowCount--;
 result.MoveNext();
 }
%>
</table>
</center>
<font face=Arial size=-1><b>
<%
// qui sotto scrivo la navigazione tra le pagine del recordset passando la
variabile PageTo che dice quale
// pagina devo scrivere
if(nPageTo>1)
 Response.Write("<a
href='search_result.asp?sesso="+sex+"&PageTo="+(nPageTo-1)+"'>&lt;&lt;
Previous "+result.PageSize+" records</a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;");
if(nRowCount==0 && nPageTo*result.PageSize!=result.RecordCount)
 Response.Write(" <a
href='search_result.asp?sesso="+sex+"&PageTo="+(nPageTo+1)+"'>Next
"+result.PageSize+" records &gt;&gt;</a>");
%>
</b></font>
<br>
<br>
<br>
<br>
</td></tr></table>
</center>
</body>
</html>
<%
}
%>
L'unico svantaggio di questa implementazione è che non riesco a chiudere la
connessione alla fine della pagina e quindi rimangono allocate delle risorse
per un po' di tempo inutilmente....
Ma il vantaggio che si ha in query complesse (non in questo caso) è che
l'esecuzione della query andrebbe rifatta tutte la volte, mentre così si
"aspetta" solo dopo il "submit" della form, ma poi basta.
Spero che questo ti aiuti a risolvere il tuo problema
Ciao
SIMO


Di solito questo errore dipende dall'accesso al database: quinid o dal
driver o dal motore del databse, non certo dal server WEB
Infatti l'errore ti viene dato da un metodo dell'oggetto recordset.