Newsgroup: it.lavoro.professioni.webmaster
Titolo: [OT] Riutilizzo dei recordset (ASP) e conteggio record :-(

Ho due questioni:
1) se utilizzo un recordset per contenere il risultato di una query e poi
faccio una seconda query, devo per forze creare un nuovo rcordset? Non posso
riutilizzare quello che ho? Se si come faccio a ripulire il recordset dai
vecchi dati?
2) Devo contare i record in una tabella. Ho capito (a mie spese) che il
metodo recordcount non va, e non è affidabile nemmeno contarli con un while
e movenxt + variabile contatore. Vorrei quindi usare una query tipo:
select count(*) from tabella
fatto questo, come leggo dal recordset il valore restituito dalla query?
Grazie

 fatto questo, come leggo dal recordset il valore restituito dalla
query?
hai due possibilità.  prima: se setti un rst con la q di cui sopra
avrai ovviamente un rst che ha un solo campo.  di preciso non sai come
si chiama ma sai che è il primo (ed unico).  puoi riferirti ai campi
di un rst o col nome o con l'indice numerico che parte da zero.  in
questo caso avrai il conteggio dentro qualcosa tipo rst(0).
se no, seconda: puoi creare la query sql usando la particella AS,
cioè:
select count(*) AS pippo from tabella
(as in inglese significa, all'incirca, "come se fosse...").
in questo caso hai deciso di rinominare il campo che contiene il valore
del conteggio in pippo, quindi ritrovi il valore in rst("pippo").

 fatto questo, come leggo dal recordset il valore restituito dalla
query?
hai due possibilità.  prima: se setti un rst con la q di cui sopra
avrai ovviamente un rst che ha un solo campo.  di preciso non sai come
si chiama ma sai che è il primo (ed unico).  puoi riferirti ai campi
di un rst o col nome o con l'indice numerico che parte da zero.  in
questo caso avrai il conteggio dentro qualcosa tipo rst(0).
se no, seconda: puoi creare la query sql usando la particella AS,
cioè:
select count(*) AS pippo from tabella
Ok. Questo è il modo più sicuro per contare i records vero?

 ha scritto nel messaggio
news:1102443528.2...@z14g2000cwz.googlegroups.com...
premesso che sarebbe più OT it.www.comp.asp...
[CUT]
Ho seguito le tuie indicazioni, ma non funziona.
Ognuna delle 3 tabelle del db è costituita dai seguenti cambi:
ID | Domanda | RispA | RispB | RispC | RispD | Presa
Devo prendere 10 domande a caso dalla prima, 35 dalla seconda tabella e 35
dala terza.
Ogni volta che le prendo segno ad 1 il campo "presa" per evitare di
riprenderla.
Quando ho meno di 10 o 35 domande nella corrispondente tabella le prendo
tutte.
In questo modo riesco ad ottenere sempre questionari casuali di 80 domande.
Ho scritto un po' di codice di getto, ma non va.
Mi permetto di postarlo, magari qualcuno di buona volta (essendo vicini al
Natale) mi da una mano.
eccolo:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd
">
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Stile3 {color: #000066; font-weight: bold; }
.Stile4 {color: #0000FF}
-->
</style>
</head>
<body>
<%
  dim objConn
  set objConn = Server.CreateObject("ADODB.Connection")
  objConn.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)};" & _
           "DBQ=" & Server.MapPath("\quiz\db\quesiti.mdb")
  objConn.Open
  dim objRs
  set objRs = Server.CreateObject("ADODB.Recordset")
  objRs.ActiveConnection =  objConn
  objRs.CursorType = 3
  objRs.LockType = 3
  strConta = "SELECT COUNT(*) AS numRecords FROM Generale"
  strSQL   = "SELECT ID, Domanda, RispA, RispB, RispC, RispD,
Soluzione,Presa  FROM Generale where Presa<>1"
  objRs.Open strConta
  numDomande1 = cInt(objRs("numRecords"))
  objRs.close
  'set objRs = Nothing
  objRs.Open strSQL
  Randomize()
  count1=1
  x1=10 'numero domande da prendere
  If not objRs.EOF then
  ' do while not objRs.EOF
   ' objRs.movenext
 '   numDomande1=numDomande1+1
  ' loop
   'numDomande = objRs.RecordCount
   'Response.write(numDomande&"<br>")
   'objRs.MoveFirst()
   response.Write numDomande1 & "<br>"
   'if numDomande<>0 then
    %>
    <table border="1">
    <%
    do while (count1<=x1 AND count1<=numDomande1)
     IDDomanda1 = CInt((numDomande1 - 1)*Rnd() + 1 )
     objRs.move IDDomanda1
     if (objRs("Presa") <> 1) then
      %>
      <tr bgcolor="#00FF00">
       <td><span class="Stile3"><%=count%></span></td>
       <td><span class="Stile3"><%=(objRs("Domanda"))%>        </span></td>
       </tr>
      <tr bgcolor="#FFFFCC">
       <td bgcolor="#FFFFCC"><span class="Stile4">A</span></td>
       <td><span class="Stile4"><%=(objRs("RispA"))%></span></td>
      </tr>
      <tr bgcolor="#99FFFF">
       <td><span class="Stile4">B</span></td>
       <td><span class="Stile4"><%=(objRs("RispB"))%></span></td>
        </tr>
      <tr bgcolor="#FFFFCC">
       <td><span class="Stile4">C</span></td>
       <td><span class="Stile4"><%=(objRs("RispC"))%></span></td>
      </tr>
      <tr bgcolor="#99FFFF">
       <td><span class="Stile4">D</span></td>
       <td><span class="Stile4"><%=(objRs("RispD"))%></span></td>
      </tr>
      <tr>
      <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      </tr>
      <%
      objRS("Presa")=1
      objRs.update
      count = count + 1
     end if
     objRs.MoveFirst()
    loop
   'else
    'Response.write("Non ci sono domande sufficienti")
    'prendile tutte
   'end if
  else
   response.write("Domande trovate zero. Errore !!!!")
  end if
  objRs.close
  set objRs = Nothing
   dim objRs2
  set objRs2 = Server.CreateObject("ADODB.Recordset")
  objRs2.ActiveConnection =  objConn
  objRs2.CursorType = 3
  objRs2.LockType = 3
  strConta = "SELECT COUNT(*) AS numRecords FROM Pedagogia"
  strSQL = "SELECT ID, Domanda, RispA, RispB, RispC, RispD, Soluzione,Presa
FROM Pedagogia where Presa<>1"
  objRs2.Open strConta
  numDomande2 = cInt(objRs2("numRecords"))
  objRs2.close
  set objRs2 = Nothing
  objRs2.Open strSQL
  Randomize()
  count2=1
  x2=35 'numero domande da prendere
  'numDomande2 =0
  If not objRs2.EOF then
  ' do while not objRs2.EOF
   ' objRs2.movenext
    'numDomande2=numDomande2+1
   'loop
'   numDomande = objRs2.RecordCount
   'Response.write(numDomande&"<br>")
   'objRs2.MoveFirst()
   response.Write numDomande2 & "<br>"
   'if numDomande>=x then
    do while (count2<=x2 AND count2<=numDomande2)
     IDDomanda2 = CInt((numDomande2 - 1)*Rnd() + 1 )
     objRs2.move IDDomanda2
     if (objRs2("Presa") <> 1) then
      %>
      <tr bgcolor="#00FF00">
       <td><span class="Stile3"><%=count%></span></td>
       <td><span class="Stile3"><%=(objRs2("Domanda"))%> </span></td>
      </tr>
      <tr bgcolor="#FFFFCC">
       <td bgcolor="#FFFFCC"><span class="Stile4">A</span></td>
       <td><span class="Stile4"><%=(objRs2("RispA"))%></span></td>
      </tr>
      <tr bgcolor="#99FFFF">
       <td><span class="Stile4">B</span></td>
       <td><span class="Stile4"><%=(objRs2("RispB"))%></span></td>
      </tr>
      <tr bgcolor="#FFFFCC">
       <td><span class="Stile4">C</span></td>
       <td><span class="Stile4"><%=(objRs2("RispC"))%></span></td>
      </tr>
      <tr bgcolor="#99FFFF">
       <td><span class="Stile4">D</span></td>
       <td><span class="Stile4"><%=(objRs2("RispD"))%></span></td>
      </tr>
      <tr>
      <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      </tr>
      <%
      objRS2("Presa")=1
      objRs2.update
      count = count + 1
     end if
     objRs2.MoveFirst()
    loop
   'else
    'Response.write("Non ci sono domande sufficienti")
    'prendile tutte
   'end if
  else
   response.write("Domande trovate zero. Errore !!!!")
  end if
  objRs2.close
  set objRs2 = Nothing
  dim objRs3
  set objRs3 = Server.CreateObject("ADODB.Recordset")
  objRs3.ActiveConnection =  objConn
  objRs3.CursorType = 3
  objRs3.LockType = 3
  strConta = "SELECT COUNT(*) AS numRecords FROM Penitenziario"
  strSQL = "SELECT ID, Domanda, RispA, RispB, RispC, RispD, Soluzione,Presa
FROM Penitenziario where Presa<>1"
  objRs3.Open strConta
  numDomande3 = cInt(objRs3("numRecords"))
  objRs3.close
  set objRs3 = Nothing
  objRs3.Open strSQL
  Randomize()
  count3=1
  x3=35 'numero domande da prendere
  'numDomande3 = 0
  If not objRs3.EOF then
   'numDomande = objRs3.RecordCount
   'do while not objRs3.EOF
    'objRs3.movenext
    'numDomande3=numDomande3+1
   'loop
   'Response.write(numDomande&"<br>")
   'objRs3.MoveFirst()
   response.Write numDomande3 & "<br>"
   'if numDomande>=x then
    do while (count3<=x AND count3<=numDomande3)
     IDDomanda3 = CInt((numDomande3 - 1)*Rnd() + 1 )
     objRs3.move IDDomanda3
     if (objRs3("Presa") <> 1) then
      %>
      <tr bgcolor="#00FF00">
       <td><span class="Stile3"><%=count%></span></td>
       <td><span class="Stile3"><%=(objRs3("Domanda"))%>        </span></td>
      </tr>
      <tr bgcolor="#FFFFCC">
       <td bgcolor="#FFFFCC"><span class="Stile4">A</span></td>
       <td><span class="Stile4"><%=(objRs3("RispA"))%></span></td>
      </tr>
      <tr bgcolor="#99FFFF">
       <td><span class="Stile4">B</span></td>
       <td><span class="Stile4"><%=(objRs3("RispB"))%></span></td>
      </tr>
      <tr bgcolor="#FFFFCC">
       <td><span class="Stile4">C</span></td>
       <td><span class="Stile4"><%=(objRs3("RispC"))%></span></td>
      </tr>
      <tr bgcolor="#99FFFF">
       <td><span class="Stile4">D</span></td>
       <td><span class="Stile4"><%=(objRs3("RispD"))%></span></td>
      </tr>
      <tr>
      <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      </tr>
      <%
      objRS3("Presa")=1
      objRs3.update
      count = count + 1
     end if
     objRs3.MoveFirst()
    loop
%>
</table>
   <%
   'else
    'Response.write("Non ci sono domande sufficienti")
    'prendile tutte
   'end if
  else
   response.write("Domande trovate zero. Errore !!!!")
  end if
  objRs3.close
  set objRs3 = Nothing
  objConn.close
  set objConn = Nothing
%>
</body>
</html>

 metodo recordcount non va, e 
va benissimo.
va perfettamente.
solo che devi partire da 1 e non da 0
un ciclo ad ex è il seguente:
for i =1 to recordset.recordcount
    response.write recordset("nome_campo")
    recordset.movenext
next
ciao
anto

Ok. Questo č il modo piů sicuro per contare i records vero?
il count?  direi di sě, tra l'altro gli puoi anche porre condizioni
con un where.
-- 
abbraccio espedienti 365 giorni l'anno.
(generata da: 
http://www.phibbi.com/extra/gswe.php
)
la mia casella email č filtrata: inserite la parola 
"newsgroup" nel subject se volete scrivermi

Riposto un codice più breve.
Diciamo che deve prendere 51 records alla volta e se ne rimangono meno di 51
(ad esempio 34), li mostra tutti e 31 e poi (dato che ho preso tutte le
domado) se cerco ancora di visualizzare ancora record mi dice che sono
finiti, dato che ho già preso tutte le domande e per tutti i record il campo
"Presa" è a 1.
Ecco quanto:

<body>
<%


  strConta = "SELECT COUNT(*) AS numRecords FROM Generale WHERE Presa<>1 "
  objRs.Open strConta
  numDomande1 = cInt(objRs("numRecords"))
  objRs.close
  strSQL   = "SELECT ID, Domanda, RispA, RispB, RispC, RispD,
Soluzione,Presa  FROM Generale WHERE Presa<>1"
  objRs.Open strSQL
  Randomize()
  count1=1
  x1=51  'numero domande da prendere
  If not objRs.EOF then
      response.Write numDomande1 & "<br>"
     %>
        <table border="1">
    <%
    do while ((count1<=x1) AND (count1<=numDomande1)) ' continua fino a x1
oppure fino a numDomande1
        IDDomanda1 = CInt((numDomande1 - 1)*Rnd() + 1 )
        objRs.move IDDomanda1
        Response.Write(objRs("Presa"))
        if  objRs("Presa") = 0 then
        %>
       <tr>
           <td><%=count1%></td>
           <td><%=(objRs("Domanda"))%></td>
       </tr>
      <tr>
           <td> A </td>
           <td><%=(objRs("RispA"))%></td>
      </tr>
      <tr>
           <td> B </td>
           <td><%=(objRs("RispB"))%></td>
        </tr>
      <tr>
           <td> C </td>
           <td><%=(objRs("RispC"))%></td>
      </tr>
      <tr>
           <td> D </td>
           <td><%=(objRs("RispD"))%></td>
      </tr>
      <tr>
     <%
        objRs("Presa")=1
        objRs.update
        count1 = count1 + 1
     end if
     objRs.MoveFirst()
    loop
  else
     response.write("Domande trovate zero. Errore !!!!")
  end if
  objRs.close
  set objRs = Nothing
 %>
</table>
</body>
</html>

 select count(*) from tabella
perchè fare due query? aggiungi un campo alla prima query che ti restituisce
il count...
-- 
Lino Mari
http://www.ebow.it
 - e-business on web!
http://www.ebow.it/blog/
 - Mktg Log
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004


Grazie, ma il problema è che ad un certo punto (quando rimangono meno record
di x1 cioè 51 record) la condizione del while dovrebbe garantirmi che
finisce il "pescaggio" dal rs ed invece mi viene dato un errore: eccezione.
Ma?!!!