Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Annidare due recordset

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    156

    Annidare due recordset

    Ho due tabelle, una definisce un elenco di sezioni, l'altra un elenco di categorie associate alle sezioni.

    Vorrei visualizzare l'elenco delle sezioni, e, per ogni sezione, l'elenco delle categorie associate.

    Visualizzo le sezioni così:

    codice:
    <%
    set conn = Server.CreateObject("ADODB.Connection")
    conn.Open xDb_Conn_Str
    sql = "SELECT * FROM Sezioni"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    do while not(rs.eof)
    x_Nome_Sezione = rs("Nome_Sezione")
    x_Chiave_Sezione = rs("Chiave_Sezione")
    x_Descrizione_Sezione = rs("Descrizione_Sezione")
    %>
    <table style="width: 100%" cellpadding="2" class="v9">
    <tr class="bg">
    <td style="width: 20%; height: 25px"><% response.write x_Nome_Sezione %></td>
    <td style="width: 80%; height: 25px"><% response.write x_Descrizione_Sezione %></td>
    </tr>
    
    </table>
    <%
    rs.movenext
    loop
    %>
    e le categorie con lo stesso sistema.

    Per ottenere che per ogni sezione vengano annidate le categorie associate (in un campo nella tab categorie inserisco il nome della sezione associata) ho provato a fare così:
    codice:
    <%
    set conn = Server.CreateObject("ADODB.Connection")
    conn.Open xDb_Conn_Str
    sql = "SELECT * FROM Sezioni"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    do while not(rs.eof)
    x_Nome_Sezione = rs("Nome_Sezione")
    x_Chiave_Sezione = rs("Chiave_Sezione")
    x_Descrizione_Sezione = rs("Descrizione_Sezione")
    %>
    <table style="width: 100%" cellpadding="2" class="v9">
    <tr class="bg">
    <td style="width: 20%; height: 25px"><% response.write x_Nome_Sezione %></td>
    <td style="width: 80%; height: 25px"><% response.write x_Descrizione_Sezione %></td>
    <tr>
    
    
    
    <%
    sql = "SELECT * FROM Categorie WHERE Chiave_Categoria='x_Chiave_Sezione'"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    
    do while not(rs.eof)
    x_Nome_Categoria = rs("Nome_Categoria")
    x_Chiave_Categoria = rs("Chiave_Categoria")
    x_Sezione_Padre = rs("Sezione_Padre")
    x_Descrizione_Categoria = rs("Descrizione_Categoria")
    %>
    <table style="width: 100%" cellpadding="2" class="v9">
    <tr class="bg">
    <td style="width: 20%; height: 25px"><% response.write x_Nome_Categoria %></td>
    <td style="width: 80%; height: 25px"><% response.write x_Descrizione_Categoria %></td>
    </tr>
    </table>
    <%
    rs.movenext
    loop
    %>
    
    
    
    
    
    </tr>
    </table>
    <%
    rs.movenext 
    loop
    %>
    
    <%
    rs.Close
    set rs = Nothing
    conn.Close
    set conn = Nothing
    %>
    e ottengo il seguente errore:

    ADODB.Recordset error '800a0bcd'

    Il record corrente corrisponde all'inizio o alla fine del file oppure è stato eliminato. Per eseguire l'operazione richiesta è necessario disporre di un record corrente.

    /admin/categorie/1.asp, riga 64
    che ho colorato in rosso.
    Si capisce quanto sono dilettante... vi chiedo, come risolvo?
    Grazie

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Prova cosi:
    codice:
    <%
    set conn = Server.CreateObject("ADODB.Connection")
    conn.Open xDb_Conn_Str
    sql = "SELECT * FROM Sezioni"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    do while not(rs.eof)
    x_Nome_Sezione = rs("Nome_Sezione")
    x_Chiave_Sezione = rs("Chiave_Sezione")
    x_Descrizione_Sezione = rs("Descrizione_Sezione")
    %>
    <table style="width: 100%" cellpadding="2" class="v9">
    <tr class="bg">
    <td style="width: 20%; height: 25px"><% response.write x_Nome_Sezione %></td>
    <td style="width: 80%; height: 25px"><% response.write x_Descrizione_Sezione %></td>
    <tr>
    
    
    <%
    sql = "SELECT * FROM Categorie WHERE Chiave_Categoria='"&x_Chiave_Sezione&"'"
    Set rs1 = Server.CreateObject("ADODB.Recordset")
    rs1.Open sql, conn ,3,3
    
    do while not(rs.eof)
    x_Nome_Categoria = rs1("Nome_Categoria")
    x_Chiave_Categoria = rs1("Chiave_Categoria")
    x_Sezione_Padre = rs1("Sezione_Padre")
    x_Descrizione_Categoria = rs1("Descrizione_Categoria")
    %>
    <table style="width: 100%" cellpadding="2" class="v9">
    <tr class="bg">
    <td style="width: 20%; height: 25px"><% response.write x_Nome_Categoria %></td>
    <td style="width: 80%; height: 25px"><% response.write x_Descrizione_Categoria %></td>
    </tr>
    </table>
    <%
    rs.movenext
    loop
    %>
    </tr>
    </table>
    <%
    rs1.movenext 
    loop
    %>
    
    <%
    rs.Close
    set rs = Nothing
    rs1.Close
    set rs1 = Nothing
    conn.Close
    set conn = Nothing
    %>
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    156
    Ciao, grazie per l'aiuto.
    Ho provato il codice ma si comporta in modo strano.

    In base a come ho popolato le tabelle dovrebbe venire il seguente schema:

    -Sezione 1
    Categoria_associata a sezione 1
    -Sezione 2
    Categoria_associata a sezione 2

    invece viene fuori questo:

    -Sezione 1
    Categoria_associata a sezione 1
    Categoria_associata a sezione 1

    e poi basta. Il loop si ferma alla prima sezione e mi elenca il primo record 'categoria'
    tante volte quante sono le sezioni.


    :master:

  4. #4
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Controlla rs e rs1 sono messi in ordine "sparso" e non concentrici.

    Roby

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    156
    Concentrici dovrebbe essere così:

    codice:
    <%
    set conn = Server.CreateObject("ADODB.Connection")
    conn.Open xDb_Conn_Str
    sql = "SELECT * FROM Sezioni"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    do while not(rs.eof)
    x_Nome_Sezione = rs("Nome_Sezione")
    x_Chiave_Sezione = rs("Chiave_Sezione")
    x_Descrizione_Sezione = rs("Descrizione_Sezione")
    %>
    -------------------------------------------
    
    SEZIONE<% response.write x_Nome_Sezione %>
    
    -------------------------------------------
    
    <%
    sql = "SELECT * FROM Categorie WHERE Sezione_Padre='"& x_Chiave_Sezione &"'"
    Set rs1 = Server.CreateObject("ADODB.Recordset")
    rs1.Open sql, conn ,3,3
    
    do while not(rs.eof)
    x_Nome_Categoria = rs1("Nome_Categoria")
    x_Chiave_Categoria = rs1("Chiave_Categoria")
    x_Sezione_Padre = rs1("Sezione_Padre")
    x_Descrizione_Categoria = rs1("Descrizione_Categoria")
    %>
    -----------------------------------------------
    
    CATEGORIA<% response.write x_Nome_Categoria %>
    
    -----------------------------------------------
    
    <%
    rs1.movenext 
    loop
    %>
    
    <%
    rs.movenext
    loop
    %>
    
    <%
    rs.Close
    set rs = Nothing
    rs1.Close
    set rs1 = Nothing
    conn.Close
    set conn = Nothing
    %>
    Se faccio così ottengo:

    -Sezione 1
    Categoria_associata a sezione 1

    e l'errore:
    ADODB.Field error '800a0bcd'

    Il record corrente corrisponde all'inizio o alla fine del file oppure è stato eliminato. Per eseguire l'operazione richiesta è necessario disporre di un record corrente.

    /admin/categorie/1.asp, riga 37

    che sarebbe:

    x_Nome_Categoria = rs1("Nome_Categoria")

    Se non li annido i due rs funzionano correttamente. Dove diavolo sbaglio?

  6. #6
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    codice:
    sql = "SELECT * FROM Categorie WHERE Sezione_Padre='"& x_Chiave_Sezione &"'"
    Set rs1 = Server.CreateObject("ADODB.Recordset")
    rs1.Open sql, conn ,3,3
    
    do while not(rs1.eof)
    Devi comunque controllare non si aun recordset vuoto mediente
    if not rs1.EOF then

    Roby

    Roby

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    156
    Ho trovato l'errore, ora funziona tutto a dovere.
    C'era rs.eof invece di rs1.eof nell'rs interno...
    Grazie per l'assistenza, alla prossima.

  8. #8
    Ciao...ottimo , ma adesso vorrei paginare il record...o almeno non mostrarli tutti
    Codice PHP:
    <%
        
    param session("iddest")
        
    RecordsPerPagina 
            page
    =
    set conn 
    Server.CreateObject("ADODB.Connection")
    conn.Open MM_adoCon_STRING
    sql 
    "SELECT * FROM bloggate WHERE iduser='"param &"' ORDER BY Id DESC"
    Set rs Server.CreateObject("ADODB.Recordset")
    rs.Open sqlconn ,3,3
    rs
    .PageSize RecordsPerPagina 
    rs
    .AbsolutePage page 
    If rs.Eof=True or rs.Bof=True then 
      Response
    .Write "

    Nessun risultato trovato</P>" 
    Else 
      For 
    i=1 to RecordsPerPagina 
         
    if Not rs.EOF then 
            
    'qui si dovrebbero mostrare le 5 righe :-((( 
            rs.MoveNext 
         end if 
      Next 
    End if 
    commento = rs("id")...per il secondo rs
    %> 
    Ottengo questo errore
    ADODB.Recordset error '800a0cb3'
    Current Recordset does not support bookmarks. This may be a limitation of the provider or of the selected cursortype.
    /home/profilocrea.asp, line 1678...
    Ho cercato senza risultati utili....
    Grazie anticipatamente

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.