+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Query annidata sql

  1. #1
    L'avatar di queen_live78
    queen_live78 non  in linea Scribacchino
    Luogo
    Italy
    Post
    514

    Query annidata sql

    Salve a tutti ho un piccolo problemino non riesco a tirare fuori una lista di dati passando un id. Mi spiego meglio ho una tabella che contiene le categorie dei ranks mi interessa estrapolare gli ID della tabella che ha come valore del campo "id_cat_r" ---> 2

    a questo punto recupero tutti gli id da un altra tabella chiamata jqb_cat_ranks_ranks passando come parametro fisso il 2, in questo modo recupero tutti gli id che mi interessano adesso dovrei recuperare i nome da un altra tabella passando questi id e caricando i nomi dentro una combo list.. vi posto il codice :

    codice:
     Set rs = CreateObject("ADODB.Recordset") 'setta rs come un record per ADO
       
    variabilecampo = 2
       
       
         If (CNN.State = adStateOpen) Then
            query = "SELECT * FROM jqb_cat_ranks_ranks where id_cat_r = " & variabilecampo & ""
            rs.Open query, CNN
           
                
                    
                    
               Do While Not (rs.EOF)
                    
                    
                temp0 = rs("id")
                'rs.Close
                    
                    
                query2 = "SELECT * FROM jqb_ranks where id_rank = " & temp0 & ""
                rs.Open query2, CNN
                    
                temp1 = rs("name")
                combolist1.AddItem temp1
                rs.MoveNext
                    
               Loop
         
       End If

    decommentando rs close riesco a recuperare dalla tabella finale passando l'id solo il primo record ma non tutti gli altri.. cosa normale in quanto chiudo la connesione... solo che non mi esegue la query non non faccio rs.close....

    qualche idea ?
    Federico
    JQooBe Fouder

  2. #2
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    Post
    2,676
    Non che si capisca molto. Parli di ranks, categorie... come se tutti sapessero qual' l'argomento. Una cosa per si intuisce: se non ricordo male qualche tempo fa avevi un problema simile e ti fu raccomandato di approfondire l'uso delle JOIN nelle query. Come and a finire?
    Il regolamento del forum: la prima cosa da leggere.

  3. #3
    L'avatar di gibra
    gibra non  in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    5,773
    Come puoi mai lontanamente pensare che possa funzionare il tuo codice?

    Mi pare ovvio che devi usare un secondo recordset (rs2) per la seconda query2.

  4. #4
    L'avatar di queen_live78
    queen_live78 non  in linea Scribacchino
    Luogo
    Italy
    Post
    514
    Ciao Brontolo, ho una tabella chiamata jqb_cat_ranks che contiene diverse categorie avente la seguentre struttura :

    Nome Tabella : JQB_CAT_RANKS
    Campi : id_cat_r - Name -
    valori : 1 Livelli forum
    2 Gradi Aziendali
    3 Gradi Associazione

    Adesso a me interessa la categoria Gradi Aziendali quindi quella con valore del campo id_cat_r = 2

    Ora devo passare questo valore in una query e recuperare tutti gli id della seconda tabella chiamata jqb_cat_ranks_ranks con il valore id_cat_r = 2

    struttra seconda tabella :
    Nome Tabella : jqb_cat_ranks_ranks
    campi : id - id_cat_r - id_rank
    valori : 1 1 1
    2 1 2
    3 1 3
    4 2 4
    5 2 5
    6 2 6
    7 2 7

    inserisco in un ciclo e cerco di recuperare tutti gli id_rank che hanno come id_cat_r = 2


    una volta ottenuti tutti gli id di mio interesse li passo ad una terza tabella jqb_ranks per recuperare il rispettivo nome:

    struttra tabella :

    nome : jqb_ranks
    campi: id_rank - name
    valore 1 Direttore
    2 Vide direttore
    3 Capo Marketing

    e cosi' via...


    in php eseguo cicli annidati e risolvo facilmente in vb6 pensavo funzionasse allo stesso modo ma evidentemente non cosi....
    Federico
    JQooBe Fouder

  5. #5
    L'avatar di queen_live78
    queen_live78 non  in linea Scribacchino
    Luogo
    Italy
    Post
    514
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Come puoi mai lontanamente pensare che possa funzionare il tuo codice?

    Mi pare ovvio che devi usare un secondo recordset (rs2) per la seconda query2.
    Gi provato Gibra, mi risponde che l'operazione non consentita se l'oggetto aperto Errore di Run-time 3705
    Federico
    JQooBe Fouder

  6. #6
    L'avatar di gibra
    gibra non  in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    5,773

  7. #7
    L'avatar di queen_live78
    queen_live78 non  in linea Scribacchino
    Luogo
    Italy
    Post
    514
    scusa setto :
    codice:
    Set rs2 = CreateObject("ADODB.Recordset")
    e la query la eseguo con rs2 no ?
    Federico
    JQooBe Fouder

  8. #8
    L'avatar di gibra
    gibra non  in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    5,773
    La query2, s.
    Ovviamente, ad ogni iterazione devi chiudere il rs2, altrimenti otterrai l'errore che hai indicato.

  9. #9
    L'avatar di queen_live78
    queen_live78 non  in linea Scribacchino
    Luogo
    Italy
    Post
    514
    Grazie Gibra ho risolto. posto la soluzione per chi fosse interessato :

    codice:
    openconnection_INS_TESS
    
    Dim query As String
    Dim query2 As String
    Dim temp1 As String
    Dim variabilecampo As String
    
    Set rs = CreateObject("ADODB.Recordset") 'setta rs come un record per ADO
    Set rs2 = CreateObject("ADODB.Recordset") 'setta rs come un record per ADO
    variabilecampo = 2
       
       
         If (CNN.State = adStateOpen) Then
            query = "SELECT * FROM jqb_cat_ranks_ranks where id_cat_r = " & variabilecampo & ""
            rs.Open query, CNN
           
                 
                    
                    
               Do While Not (rs.EOF)
                    
                  
                temp0 = rs("id")
                rs.MoveNext
                
                query2 = "SELECT * FROM jqb_ranks where id_rank = " & temp0 & ""
                rs2.Open query2, CNN
                
                Do While Not (rs2.EOF)
                
                    
                temp1 = rs2("name")
                combolist1.AddItem temp1
                rs2.MoveNext
                
                Loop
                rs2.Close
               
               
               Loop
         
       End If
    Federico
    JQooBe Fouder

  10. #10
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    Post
    2,676
    "SELECT name FROM jqb_ranks AS T1 INNER JOIN jqb_cat_ranks_ranks AS T2 ON T1.id_rank = T2.id WHERE T2.id_cat_r = " & variabilecampo
    Il regolamento del forum: la prima cosa da leggere.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi