Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Gordio
    Registrato dal
    Mar 2006
    Messaggi
    37

    Sub ricorsiva problemi di record set

    Ciao a tutti,
    ho un problema che vorrei esporvi.

    Ho una procedura che legge su una tabella DB2-400 e prende per ogni codice i suoi componenti.

    Padre---> Figlio 1, figlio 2,....., figlio n

    Ogni Padre può avere più Figli

    Codice PHP:
    '---------------- Funzione leggi da AS-------------
    Sub PrendiFiglio(Padrex)
    '
    -------------Comandi da eseguire sul sistema AS/400------
        
    Response.Write ("Padre da richiesta      = ") & Padrex "</br>"
        
    CommandText "SELECT D§COAR, D§CODF FROM " Session("Library") & "." Session("FileName") & " WHERE (D§COAR = '"Padrex &"')"
        
    CommandType adCmdText
        AS400Command
    .CommandText CommandText
        AS400Command
    .CommandType CommandType

    Set AS400File_rs 
    AS400Command.Execute

    If (Err.Number Then
        
    While NOT AS400File_rs.EOF
            
        
    ' verifica a video 
            Response.Write ("Padre AS          ----= ") & AS400File_rs(0) & "  "
            Response.Write ("Figlio            ----= ") & AS400File_rs(1) & "</br>"
        
        AS400File_rs.movenext
        Wend
        AS400File_rs.Close
    Else
        DisplayError AS400Connection, Err.Number, Err.Description, Err.Source, "Main"
    End If
    End Sub 
    e questa funziona !!

    Ora ho la necessità di fare la stessa cosa per i Figli,
    ogni Figlio diventa Padre e devo estrarre i rispettivi Figli e cosi via...

    Ho pensato di fare una ricorsione interna alla SUB passando come parametro il primo figlio e via di seguito.


    Codice PHP:
    '---------------- Funzione leggi da AS-------------
    Sub PrendiFiglio(Padrex)
    '
    -------------Comandi da eseguire sul sistema AS/400------
        
    Response.Write ("Padre da richiesta      = ") & Padrex "</br>"
        
    CommandText "SELECT D§COAR, D§CODF FROM " Session("Library") & "." Session("FileName") & " WHERE (D§COAR = '"Padrex &"')"
        
    CommandType adCmdText
        AS400Command
    .CommandText CommandText
        AS400Command
    .CommandType CommandType

    Set AS400File_rs 
    AS400Command.Execute

    If (Err.Number Then
        
    While NOT AS400File_rs.EOF
            
            
    ' verifica a video 
            Response.Write ("Padre AS          ----= ") & AS400File_rs(0) & "  "
            Response.Write ("Figlio            ----= ") & AS400File_rs(1) & " </br>"
            
            Figlio= "& AS400File_rs(1) &"
            
        Call PrendiFiglio(Figlio)
            
        AS400File_rs.movenext
        Wend
        AS400File_rs.Close
    Else
        DisplayError AS400Connection, Err.Number, Err.Description, Err.Source, "Main"
    End If
    End Sub 
    Ma questo provoca il seguente errore:

    Tipo di errore:
    ADODB.Recordset (0x800A0E78)
    L'operazione non è consentita se l'oggetto è chiuso.
    /Webas/Distintabase/EstraiDB.asp, line 142


    la riga dell'errore è questa : AS400File_rs.movenext

    Io non vorrei crearmi una TB d'appoggio e non posso toccare il DB2,

    come se mi chiudesse il recordset, ma la ricorsione non dovrebbe creare un stack che riporta i valori a ritroso nelle varie chiamate????

    Qualche idea? Grazie

  2. #2
    certo che ti si chiude il recordset! lo fa questa riga AS400File_rs.Close ogni volta che hai finito di trattare un figlio. all'inizio della sub metti l'apertura del recordset

    poi facci sapere

  3. #3
    In sostanza devi dare un altro nome alla variabile "sql" che tu chiami "commandText"...e anche alla "rs" che tu chiami "AS400File_rs"....basterebbe anche solo chiamrle "CommandText2" e "AS400File_rs2"...e sostituisci il nuovo nome in tutto il ciclo all'interno. Ti da quell'errore perché tu chiudi il AS400File_rs nel ciclo all'interno con il comando "AS400File_rs.close" e poi cerchi di fare un "AS400File_rs.movenext"...e l'hai appena chiuso.
    Se invece nel ciclo interno avesse trovato "AS400File_rs2.close"...avrebbe continuato.

    Facci sapere...


    ops....ha già risposto optime...che ne sa quasi + di tutti qui...scusate..

  4. #4
    Utente di HTML.it L'avatar di Gordio
    Registrato dal
    Mar 2006
    Messaggi
    37
    Originariamente inviato da optime
    certo che ti si chiude il recordset! lo fa questa riga AS400File_rs.Close ogni volta che hai finito di trattare un figlio. all'inizio della sub metti l'apertura del recordset

    poi facci sapere

    Codice PHP:
    Sub PrendiFiglio(Padrex)
    '-------------Comandi da eseguire sul sistema AS/400------
        Response.Write ("Padre da richiesta      = ") & Padrex & "</br>"
        CommandText = "SELECT D§COAR, D§CODF FROM " & Session("Library") & "." & Session("FileName") & " WHERE (D§COAR = '"& Padrex &"')"
        CommandType = adCmdText
        AS400Command.CommandText = CommandText
        AS400Command.CommandType = CommandType

    Set AS400File_rs = AS400Command.Execute 
    Ma non è questo?

  5. #5

  6. #6
    Utente di HTML.it L'avatar di Gordio
    Registrato dal
    Mar 2006
    Messaggi
    37
    Originariamente inviato da optime
    dov'è la dim?
    OK, messa nella SUB !

    Funziona tutto (almeno da un primo controllo)

    GRAZIE DI CUORE !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.