Errore treeview

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Errore treeview

    enzodb ha scritto:


    ...
    ..., QGenerale.tblAnni.Anno FROM QGenerale WHERE IDNazione", , dbReadOnly)
    ...
    Cos'è QGenerale.tblAnni.Anno? un campo multivalore? QGenerale è una query? Hai verificato che quella stessa query, scritta in quel modo, funzioni? Forse era solo QGenerale.Anno?
  • Re: Errore treeview

    Enzo .... DEVI DIRE QUALE ERRORE ...

    Se continui così genericamente finirà che nessuno ti risponderà ....

    Fai uno sforzo, su ...
  • Re: Errore treeview

    Buongiorno a tutti, allora partiamo dal principio perché oramai mi sono perso, allora mi sto costruendo un piccolo file per la gestione della mia raccolta delle monete in euro, le tabelle sono queste:
    
    tblMonete
    IDMoneta	Contatore
    IDNazione	relazione	tblNazioni:	 IDNazione, Nazione
    IDAnno	Relazione	tblAnni:	 IDAnno, Anno (1999;2000;2001 ecc.)
    IDTipo	Relazione	tblTipo: 	IDTipo,Tipo (Commemorativa;Divisionale)
    IDTaglio	Relazione	tblTaglio:	IDTaglio,Taglio (0,01;0,02;0,05 ecc.)
    Disponibile	Campo si/no
    
    I campi ID nella tabella principale (tblMonete) sono caselle combinate. Successivamente mi sono creato una maschera vuota dove ho inserito il controllo treeview e, nella proprietà della maschera “su Apertura” ho inserito questa prima parte del codice:
    
    Private Sub Form_Open(Cancel As Integer)
    
    Dim tempnode As MSComctlLib.Node
    Dim rsN As DAO.Recordset    'contiene i valori delle nazioni
    Dim rsA As DAO.Recordset    'contiene i valori degli anni
    Dim rsT As DAO.Recordset    'contiene i valori del tipo delle monete
    Dim rsM As DAO.Recordset    'contiene i valori delle monete
    
    tv.Nodes.Clear              'svuora il controllo treeview
    Set tempnode = tv.Nodes.Add(, , "N", "Nazione")
    Set rsN = CurrentDb.OpenRecordset("Select IDNazione, Nazione from tblNazioni order by Nazione", , dbReadOnly)
    Do While Not rsN.EOF
    Set tempnode = tv.Nodes.Add("N", tvwChild, "NZ" & rsN.Fields("IDNazione"), rsN.Fields("Nazione"))
    
    rsN.MoveNext
    Loop
    rsN.Close
    
    End Sub
    
    Faccio una prova del codice è funzione benissimo, quindi procedo ed inserisco l’altra parte del codice:
    
    Set rsA = CurrentDb.OpenRecordset("SELECT QGenerale.IDAnno, QGenerale.tblAnni.Anno FROM QGenerale WHERE IDNazione", , dbReadOnly)
    Do While Not rsA.EOF
    Set tempnode = tv.Nodes.Add("NZ" & rsN.Fields("IDNazione"), tvwChild, "A" & rsA.Fields("IDAnno"), rsA.Fields("Anno"))
    rsN.MoveNext
    Loop
    rsA.Close
    
    In questa parte del codice non mi dice quale è l’errore ma mi evidenzia di giallo la seguente riga:
    
    Set tempnode = tv.Nodes.Add("NZ" & rsN.Fields("IDNazione"), tvwChild, "A" & rsA.Fields("IDAnno"), rsA.Fields("Anno"))
    
    Adesso chiedo a voi dove sto sbagliando? Spero che questa volta il mio problema sia effettivamente un po’ più chiaro. Grazie anticipatamente.
  • Re: Errore treeview

    Non mi sembra possibile che si fermi senza un messaggio
  • Re: Errore treeview

    enzodb ha scritto:


    ...
    
    Set rsA = CurrentDb.OpenRecordset("SELECT QGenerale.IDAnno, QGenerale.tblAnni.Anno FROM QGenerale WHERE IDNazione", , dbReadOnly)
    Do While Not rsA.EOF
    Set tempnode = tv.Nodes.Add("NZ" & rsN.Fields("IDNazione"), tvwChild, "A" & rsA.Fields("IDAnno"), rsA.Fields("Anno"))
    ...
    
    I primi due punti li avevo già scritti
    1) Prova a creare una query con questa SQL
    SELECT QGenerale.IDAnno, QGenerale.tblAnni.Anno FROM QGenerale WHERE IDNazione
    e guarda se funziona. Se non funziona (99,99% di probabilità) sistemala anche nel codice di apertura del recordset, guardando anche il punto successivo
    2) Sistema quel nome del campo [QGenerale.tblAnni.Anno], usando magari un alias direttamente nella query di partenza. Scritto così è un pugno nello stomaco. Per capirci: nella collection Fields di rsA come si chiama quel campo? A mio avviso quando usi rsA.Fields("Anno") non trova il campo. Se proprio vuoi non curarti nel nome a scapito della leggibilità del codice puoi scrivere rsA.Fields(1).
    Fatto questo vediamo se c'è ancora qualcosa che non va.
  • Re: Errore treeview

    enzodb ha scritto:


    ....
    Faccio una prova del codice è funzione benissimo, quindi procedo ed inserisco l’altra parte del codice:
    
    Set rsA = CurrentDb.OpenRecordset("SELECT QGenerale.IDAnno, QGenerale.tblAnni.Anno FROM QGenerale WHERE IDNazione", , dbReadOnly)
    Do While Not rsA.EOF
    Set tempnode = tv.Nodes.Add("NZ" & rsN.Fields("IDNazione"), tvwChild, "A" & rsA.Fields("IDAnno"), rsA.Fields("Anno"))
    rsN.MoveNext
    Loop
    rsA.Close
    
    In questa parte del codice non mi dice quale è l’errore ma mi evidenzia di giallo la seguente riga:
    
    Set tempnode = tv.Nodes.Add("NZ" & rsN.Fields("IDNazione"), tvwChild, "A" & rsA.Fields("IDAnno"), rsA.Fields("Anno"))
    
    Se non si tratta di un errore di digitazione dal loop NON esci mai .... Recordset rsA, avanzamento rsN !!!!
    Senza contare che fai riferimento anche a campi rsN (un recordset che dovresti aver chiuso in precedenza).
  • Re: Errore treeview

    max.riservo ha scritto:


    ...
    Se non si tratta di un errore di digitazione dal loop NON esci mai .... Recordset rsA, avanzamento rsN !!!!
    Pure quello, non c'avevo fatto caso. A mio avviso vuole "ciclare" il recordset più interno (rsA) per ogni record record del più esterno (rsN), per inserire i sottonodi, ecco perché far riferimento a Fields di recorset diversi (che tiene aperto contemporaneamente). C'è da lavorare.
  • Re: Errore treeview

    Buon pomeriggio, grazie max e phil per il vostro intervento,si avete centrato il mio problema, ho bisogno di vere per ogni nazione gli anni presenti, per ogni anno il tipo di monete e per ogni tipo il taglio presente nella mia collezione. Credetemi stò provando e riprovando ma non ne riesco a venire a capo. potreste corregermi il codice facendomi capire dove sbaglio?
  • Re: Errore treeview

    enzodb ha scritto:


    Buon pomeriggio, grazie max e phil per il vostro intervento,si avete centrato il mio problema, ho bisogno di vere per ogni nazione gli anni presenti, per ogni anno il tipo di monete e per ogni tipo il taglio presente nella mia collezione. Credetemi stò provando e riprovando ma non ne riesco a venire a capo. potreste corregermi il codice facendomi capire dove sbaglio?
    Rileggi i miei interventi più recenti e fa quanto c'è scritto lì, un passo alla volta.
    Per il discorso del ciclo nidificato, quando tratti il rsA (che è il più interno) devi mettere rsA.MoveNext prima di ripetere per il record successivo, altrimenti non raggiungerai mai EOF se ti muovi su rsN.
    Set rsN = CurrentDb.OpenRecordset("....", , dbReadOnly)
    Do While Not rsN.EOF
    	
    	(codice vario)
    	
    	Set rsA = CurrentDb.OpenRecordset("....", , dbReadOnly)
    	Do While Not rsA.EOF
    		
    		(altro codice)
    		
    		rsA.MoveNext '<===
    	Loop
    	rsA.Close
    	rsN.MoveNext 
    Loop
    rsN.Close
    Ecco perché all'inizio, oltre all'uso dei tag code, ho detto anche di indentare il codice, perché rende più facile capire "visivamente" in quale ciclo (e quindi su quale recordset) si sta operando.
  • Re: Errore treeview

    Grazie phil, adesso mi compare un Errore run-time35602 Key is not unique in collection ...... evidenziando sempre questo codice:
    Set tempnode = tv.Nodes.Add("NZ" & rsN.Fields("IDNazione"), tvwChild, "A" & rsA.Fields("IDAnno"), rsA.Fields("Anno"))
    ho inserito come hai detto tu
    rsA.MoveNext
    niente .... cmq grazie a tutti dopo 15 gg di gira e rigira penso di aver sbagliato qualcosa e non riesco a venirne a capo vi ringrazio ancora e chiudo il post.
  • Re: Errore treeview

    Il messaggio di errore è molto significativo e chiaro...
    La proprietà KEY deve essere Univoca... sei certo che lo sia IdNazione...? Hai solo 1 Item per ogni nazione...?
    Se inserisci dei Child come si comporta se tenti di reinserire la stessa nazione...?
    Le key nei treeview, che sono un oggetto gerarchico ricorsivo, normalmente si popola ricavando la Key per aggregazione Key padre e keyFiglio... in modo ricorsivo appunto...
    Hai valutato se rispetti questi criteri....?
  • Re: Errore treeview

    Grazie
  • Re: Errore treeview

    enzodb ha scritto:


    Grazie
    Scusa... vedo nel titolo del thread la dicitura "Non risolto". E' un refuso o davvero non riesci a trovarne il capo?
    @Alex ha spiegato dove sta l'inghippo ed è, ritengo, facilmente superabile. Facci sapere (o cambia il titolo del thread e quindi ritiro tutto)
  • Re: Errore treeview

    enzodb ha scritto:


    Grazie
    Togli immediatamente il [NON RISOLTO] perché l'incapacità di risolvere non è dovuta a carenza di informazioni adeguate ma alla TUA inesperienza.
  • Re: Errore treeview

    A che serve modificare il titolo in quel modo? A nulla.
    Infatti nessuno lo fa.

    Al limite potevi scrivere 'non sono riuscito ad usare i suggerimenti avuti'
Devi accedere o registrarti per scrivere nel forum
30 risposte