55 messaggi dal 14 febbraio 2001
Come potrei evitare in un Sub che richiama se stessa di incorrere in un' "eccezione" errore (0x80020009) ?

All'interno della mia sub eseguo una semplice query da cui estraggo un record passando come argomento della sub l'id del record. Poi vorrei richiamare la sub all'interno di se stessa passando come argomento il valore di un altro campo del record precedente , ma appunto va in errore ...... :-(((

Dove sbaglio ?
grazie
Fede

Sub DammiAlbero(categoria)

Set rsCAT = Server.CreateObject("ADODB.Recordset")
sqlCAT = "SELECT * from categoria where categoriaID=" &categoria
rsCAT.Open sqlCAT, myconn


Response.write rsCAT("categoria") & " |"
DammiAlbero rsCAT("scategoria")
End Sub

%>


1.818 messaggi dal 21 giugno 2001
Contributi
Secondo me il problema sta nel fatto che non chiudi il recordset e poi, richiamando la sub, tenti di riaprirlo nuovamente. Prova a scrivere così:
<code>
Sub DammiAlbero(categoria)

Set rsCAT = Server.CreateObject("ADODB.Recordset")
sqlCAT = "SELECT * from categoria where categoriaID=" &categoria
rsCAT.Open sqlCAT, myconn


Response.write rsCAT("categoria") & " |"
ID=rsCAT("scategoria")

rsCAT.Close()
Set rsCAT=Nothing

DammiAlbero ID

End Sub

</code>



Cia Cia
hyppos

www.teatrolabaracca.com

<code>
|--------------------------------------|
|<font color=white><b>in giro torte sol ciclos et rotor igni</b></font id=white>|
|--------------------------------------|
</code>

hyppos
<code> in giro torte sol ciclos et rotor igni</code>
55 messaggi dal 14 febbraio 2001
niete :-((( va ancora in eccezione

Tipo di errore:
(0x80020009)
Eccezione.




1.818 messaggi dal 21 giugno 2001
Contributi
Scusa ma sono frastornato stamani...
Ma da quella ricorsione non esci mai?!

Quello che fai è richiamare la sub all'infinito. Ci dovrà pur essere un momento in cui uscire, ad esempio quando non ottieni più record.

Prova a mettere una condizione del tipo

<code>
Sub DammiAlbero(categoria)

Set rsCAT = Server.CreateObject("ADODB.Recordset")
sqlCAT = "SELECT * from categoria where categoriaID=" &categoria
rsCAT.Open sqlCAT, myconn

If Not(rsCAT.EOF) Then

&nbsp; &nbsp; Response.write rsCAT("categoria") & " |"
    ID=rsCAT("scategoria")

    rsCAT.Close()
    Set rsCAT=Nothing

    DammiAlbero ID

Else

&nbsp; &nbsp; rsCAT.Close()
&nbsp; &nbsp; Set rsCAT=Nothing

End If

End Sub

</code>

Cia Cia
hyppos

www.teatrolabaracca.com

<code>
|--------------------------------------|
|<font color=white><b>in giro torte sol ciclos et rotor igni</b></font id=white>|
|--------------------------------------|
</code>

hyppos
<code> in giro torte sol ciclos et rotor igni</code>
55 messaggi dal 14 febbraio 2001
fantastico perfetto!!!!
non so come ringraziarti !!!

Fede
*********************************************************************************

?Tu vedi cose e dici;? Perchè??. Io sogno cose che non sono mai esistite e dico: ?Perché no??
-- George Bernard Shaw --


55 messaggi dal 14 febbraio 2001
c'è un modo per contare quante volte viene eseguita la procedura in modo da salvare in un array bidimensionale i due campi id e descrizione per poterli poi stampare invertendo l'ordine ?

Grazie
Fede

1.818 messaggi dal 21 giugno 2001
Contributi
Puoi usare delle variabili globali o delle variabili Session o Application. Con le ultime due però devi stare attento perché se i record sono tanti, rischi di ingolfare il server.

Dunque:
Con la prima soluzione potresti creare una matrice in cui registrare i valori. Se i dati ti servono solo temporaneamente hai già risolto, se invece li vuoi rendere disponibili per più tempo (senza dover ricollegarti al db) puoi salvare la matrice in un file .asp che poi includerai in ogni pagina in cui devi recuperare i dati, oppure in un file .xml.

Per crearti la matrice occore che questa sia definita esternamente alla sub ma che comunque rimanga all'interno dello stesso ciclo di esecuzione.

Qui sotto trovi un esempio fatto in locale per spiegarti l'idea

<code>
&lt;script language="VBScript"&gt;

Redim Matrice(1)
Dim I
Dim J

J=5
I=0

Sub DammiAlbero


If J&lt;10 Then

J=j+1
I=I+1
msgbox "I= " & I
If I&gt;UBound(Matrice) Then ReDim Preserve Matrice(I)
Matrice(I)="pippo" & J

msgbox "UBound(Matrice)= " & UBound(Matrice)
msgbox "Matrice(I)= " & Matrice(I)

DammiAlbero

Else
For I=UBound(Matrice) to 1 step -1
msgbox "Finale:Matrice(" & I &")= " & Matrice(I)
Next
End If

End Sub


DammiAlbero




&lt;/script&gt;
</code>

Cia Cia
hyppos

www.teatrolabaracca.com

<code>
|--------------------------------------|
|<font color=white><b>in giro torte sol ciclos et rotor igni</b></font id=white>|
|--------------------------------------|
</code>

hyppos
<code> in giro torte sol ciclos et rotor igni</code>
55 messaggi dal 14 febbraio 2001
i record non saranno molti al massimo 4 , è la struttura della gerarchia dell'albero di navigazione.
Ogni contenuto appartiene ad una categoria e in questo modo riesco a ricostrurmi tutto il percorso navigabile.

L'xml è il mio pane quotidiano cosa che invece non è ASP.
Non ho nemmeno a disposizione sqlServer dove tutto ciò sarebbe semplificato ma un scomodissimo database access.

Quando un utente editerà un contenuto e lo salverà pensavo di salvare il percorso come una stringa già costruita ,l 'elaborazione avverrà nel beck-end .
Però in questo modo ho bisogno di recuperare sempre la coppia idcategoria - categoria .


FedericAAAAAA :-))))))))))))))


Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.