Newsgroup: it.comp.lang.javascript
Titolo: recordset, ERRORE... si tratta di Javascript!!!

Questo è l'errore:
"Item cannot be found in the collection corresponding to the requested
name or ordinal."
Qualcuno ha già avuto questo errore?
Se si, come ha risolto?
Ciao e grazi 1k a tutti!!!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Se si, come ha risolto?
Non hai postato codice, facciamo ipotesi.
A scanso di condizioni particolari, il messaggio di errore e' abbastanza 
chiaro: stai sbagliando il nome di un campo o stai chiedendo il valore 
di un campo che non hai incluso nella clausola SELECT.
Occhio a nomi di campo con parole riservate e/o caratteri speciali (il 
caso piu' comune e su cui parecchi perdono delle giornate e' il classico 
campo chiamato "note").
In casi di omonimia di campi fra tabelle collegate specifica le tabelle 
di appartenenza ed eventualmente racchiudi i nomi tra quadre ( 
[nomeTabella].[nomeCampo] ). Provando a togliere ad uno ad uno i campi 
nella SELECT dovresti isolare il campo che scatena l'errore.
Se l'errore invece avviene quando richiedi un valore hai ovviamente gia' 
in mano la pietra dello scandalo.

Il discorso č un pochino + complicato:
nella JSP menu.jsp ho 3 select: s1,s2,s3;
In + ho un oggetto:
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
ID="feedvoci" WIDTH="0" HEIGHT="0">
    <PARAM NAME="FieldDelim" VALUE="|">
    <PARAM NAME="UseHeader" VALUE="True">
</OBJECT>
<script for="feedvoci"
event="ondatasetcomplete">mostra_voci(this.recordset);</script>
<form action="" method="post" name="inserimento" id="inserimento">
	<table width="150" border="0" cellspacing="0" cellpadding="0"
align="center">
	    <tr>
	        <td>Periodo</td>
	        <td>
	            <select name="periodo" id="periodo"
onChange="javascript:compila_voci(this.value);">
	                <option></option>
	                <option value="200301">200301</option>
	                <option value="200212">200212</option>
	                <option value="200211">200211</option>
	            </select>
			</td>
	    </tr>
	    <tr>
	        <td>Voci</td>
	        <td>
	            <select name="id_voce" id="id_voce" >
	                <option></option>
	            </select>
			</td>
	    </tr>
..........
Cosa fanno gli script???
function compila_voci(periodo)
{
    o=document.all.id_voce;
    while (o.options.length)
    	o.options.remove(0);
    oOption = document.createElement("OPTION");
    oOption.text="Caricando...";
    oOption.value="";
    o.add(oOption);
document.all.feedvoci.dataurl="/drmsc/dettagli_get_filter.jsp?periodo="+periodo+"&getting=0";
    //document.all.feedvoci.dataurl="/drmsc/ciccione.txt";
    document.all.feedvoci.charset="iso-8859-1";
    document.all.feedvoci.reset();
}
function mostra_voci(rset)
{
    while (document.all.id_voce.options.length)
    	document.all.id_voce.options.remove(0);
    if(rset.recordcount)
    {
	    oOption = document.createElement("OPTION");
	    oOption.text="Seleziona la voce";
	    oOption.value="";
	    document.all.id_voce.add(oOption);
        rset.MoveFirst();
        i=0;
        while (!rset.EOF)
        {
            oOption = document.createElement("OPTION");
            oOption.text=rset(0);
            oOption.value="";//rset.fields("DS_VOCE");
            document.all.id_voce.add(oOption);
            rset.MoveNext();
        }
        document.all.id_voce.disabled=false;
    }
    else
    {
	    oOption = document.createElement("OPTION");
	    oOption.text="Non disponibile";
	    oOption.value="";
	    document.all.id_voce.add(oOption);
    }
}
Quindi riassumendo:
Al cambio del periodo corrisponde una query al db che viene 
fatta attraverso una jsp che mi restituisce sull'out i valori separati
da pipe!


 da pipe!
Ok, rimane il fatto che e' un tipico messaggio di errore ADO (e continuo 
a pensarla cosi' finche' non dici dove viene scatenato l'errore).
Io posso solo fare ancora ipotesi:
- l'errore viene scatenato sul server e restituito come stringa dalla 
pagina jsp
- l'errore viene scatenato sul client dal recordset del 
TabularDataControl (o come si chiama)
I metodi per cercarlo rimangono quelli che ti ho suggerito prima.
Se l'errore avviene sul client a colpo d'occhio guarderei solo queste righe:
oOption.text=rset(0);
oOption.value="";//rset.fields("DS_VOCE");
Nella prima, anche se potrebbe essere implicito, prova a specificare che 
vuoi accedere alla collection Fields e in tutte e due le righe, anche se 
non dovrebbe avere a che fare con l'errore, specifica che di quel campo 
vuoi il valore: rset.Fields(0).value.
Altrimenti assegneresti un oggetto field alle proprieta' stringa di cui 
sopra.

 sopra.
Già provato!!!
Ma niente da fare!!!


Il bello č che leggendo i dati da un file txt fila tutto liscio!!!
Sto piantato su sto ca..o di problema da Venerdě (lo so che non mi fa
onore).
;)


 a pensarla cosi' finche' non dici dove viene scatenato l'errore).
O di DAO, dipende dal client probabilmente, visto che fa uso di Data 
Binding (TDC con interfaccia OLE-DB sp).
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

La cosa assurda che mi manda al manicomio...
e' che se prendo solo il primo campo... funziona!!!
quindi se faccio:
rset(0); // oppure rset.Fields(0).value;
rset(1); // oppure rset.Fields(1).value;
Da quell'errore!!!
Microsoft bastarda!!!


 Microsoft bastarda!!!
E perche' mai bastarda? Si vede che il datasource che carichi, e' 
composto da una sola colonna, o quanto meno il TDC lo vede cosi'.
Prova a fare a visualizzare rset.fields.count.
L'errore e' corretto.


 Da quell'errore!!!
Cioe' se chiedi solo rset.Fields(0).value tutto ok, mentre se chiedi il 
campo di indice uno viene fuori l'errore?
Verifica quanti campi hai a disposizione nel recordset: rset.Fields.Count
Quando sei veramente sicuro di aver fatto tutte le prove possibili, 
pensa pure al bug.
Perlomeno qualche comportamento "anomalo" con errori come il tuo mi e' 
capitato con DataBinding e filtri nei recordset.
Assicurati comunque, mi sono dimenticato di consigliartelo prima, di 
avere MDAC (Microsoft Data Access Components) aggiornatissimo.

Hai ragione!!!
E perchè vede solo un campo?!?!?!?
Il delimitatore l'ho specificato!!!
Invio la jsp che si occupa di restituire il valore del singolo report:
<%@ page errorPage="/error.jsp" %>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.util.Enumeration"%>
<%@ page import="java.util.Vector"%>
<%@ page import="jsc.log.*"%>
<%@ page import="mypkg.structures.CDbCodValFlag"%>
<jsp:useBean id="mascherina" scope="session"
class="mypkg.beans.CDettagliFilter"/>
<%
	String p = request.getParameter("periodo");
	String g = request.getParameter("getting");
	mascherina.init(request);
    String id = null;
    String valore = null;
    try
    {
        Enumeration enum = mascherina.get();
        CDbCodValFlag obj = null;
        out.print("field_0 , field_1");
        String toPass = null;
        while (enum.hasMoreElements())
        {
        	obj = (CDbCodValFlag)enum.nextElement();
            id = obj.getCode();
            valore = obj.getValue();
            toPass = id + "," + valore;
            out.print("\r\n");
            out.print(toPass);
            //out.print(id);
            //out.print(valore);
        }
    }
    catch(Exception e)
    {
        throw e;
    }
%>


 Invio la jsp che si occupa di restituire il valore del singolo report:
Non serve a nulla che tu invii la pagina jsp, piuttosto invia il codice 
che essa genera.
