Treeview errore 3464

di il
20 risposte

Treeview errore 3464

Buongiorno,
ho windows 7 pro 64 bit e microsoft access 2016 32 bit.

Nonostante ci provi in tutti i modi, anche copiando esercizi pre fatti il sistema non funziona.
Questo è l'esempio copiato:

DB costituito da 3 tabelle, Azienda-Ordine-Fattura.
Azienda 1 a molti con Ordine
Ordine 1 a molti con Fattura

Azienda: ID_Azienda, Nome
Ordine: ID_Ordine, Ordine, ID_Azienda
Fattura: ID_Fattura, NomeFattura, ID_Ordine

Cliccando sul TV riesco a vedere i nomi della aziende ma nel momento che scendo di un'altro livello da errore.
Se avete idee sono ben accette in quanto non so più che pesci pigliare.

Grazie

-------------------------------------------------
Option Compare Database
Option Explicit

Private Sub cmdCaricaTreeView_Click()
Dim tempNode As MSComctlLib.Node
Dim rsC As DAO.Recordset 'record clienti
Dim rsO As DAO.Recordset 'record ordini
Dim rsF As DAO.Recordset 'record fatture

tv.Nodes.Clear

Set tempNode = tv.Nodes.Add(, , "C", "Azienda")

Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda, Nome From Azienda ORDER BY Nome", , dbReadOnly)
Do While Not rsC.EOF
Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields("Nome"), rsC.Fields("Nome"))
'CARICO GLI ORDINI

Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine as ChiaveOrdine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine", , dbReadOnly) --------------------> errore 3464
Do While Not rsO.EOF
Set tempNode = tv.Nodes.Add("CL" & rsC.Fields("Nome"), tvwChild, "ORD" & rsO.Fields("ChiaveOrdine"), rsO.Fields("Ordine"))
rsO.MoveNext
Loop
rsO.Close

20 Risposte

  • Re: Treeview errore 3464

    Se ID_Azienda è un valore numerico non va tra apici
  • Re: Treeview errore 3464

    oregon ha scritto:


    Se ID_Azienda è un valore numerico non va tra apici
    Ti ringrazio ma non funziona.

    Se vuoi darci un occhio questo è ciò che ho provato --> ciò che tu dici mi porta all'errore 3265 (ultimo errore) oppure al penultimo.

    Mi rifaccio all'esempietto con tre tabella banali. Aziende, Ordini, Fatture. GLi ID sono tutti chiavi primarie.

    TREE VIEW CON NOMI AZIENDE
    • ID_Azienda ?Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome")) -? errore su Private Sub Comando2_Click() ? variabile non definita ? per risolverlo devo eliminare Option Explicit ? a questo punto il treeview si popola con i nome delle aziende
    • “ID_Azienda”? ……… rsC.Fields(“ID_Azienda”)………… ? mantengo Option Explicit e il tree view si popola con i nomi della aziende. Se tolgo Option Explicit il tree view si popola comunque con con i nomi d’azienda

    TREE VIEW CON NOMI ORDINI

    ERRORE 91 --> tra apici metto gli ID ed elimino Option Explicit --> errore su Do While Not rsO.EOF

    Option Compare Database

    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture

    tv.Nodes.Clear

    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
    Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields("ID_Azienda"), rsC.Fields("Nome"))
    'CARICO GLI ORDINI
    Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)
    Do While Not rsO.EOF
    Set tempNode = tv.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwChild, "ORD" & rsO.Fields("ID_Ordine"), rsO.Fields("Ordine"))

    rsO.MoveNext
    Loop
    rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub


    Errore di compilazione variabile non definita --> con ID_.... tra “” --> errore su Private Sub Comando2_Click()
    Option Compare Database
    Option Explicit

    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture

    tv.Nodes.Clear

    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
    Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields("ID_Azienda"), rsC.Fields("Nome"))
    'CARICO GLI ORDINI
    Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)
    Do While Not rsO.EOF
    Set tempNode = tv.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwChild, "ORD" & rsO.Fields("ID_Ordine"), rsO.Fields("Ordine"))
    rsO.MoveNext
    Loop
    rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub


    Errore di compilazione variabile non definita ? senza “” --> tolgo gli apici come mi è stato detto --> errore su Private Sub Comando2_Click()
    Option Compare Database
    Option Explicit

    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture

    tv.Nodes.Clear

    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
    Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome"))
    'CARICO GLI ORDINI
    Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields(ID_Azienda) & """ ORDER BY Ordine DESC", , dbReadOnly)
    Do While Not rsO.EOF
    Set tempNode = tv.Nodes.Add("CL" & rsC.Fields(ID_Azienda), tvwChild, "ORD" & rsO.Fields(ID_Ordine), rsO.Fields("Ordine"))
    rsO.MoveNext
    Loop
    rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub


    Errore 3265 --> ID_... senza apici e tolgo Option Explicit --> erorre su Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome"))

    Option Compare Database

    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture

    tv.Nodes.Clear

    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
    Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome"))
    'CARICO GLI ORDINI
    Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields(ID_Azienda) & """ ORDER BY Ordine DESC", , dbReadOnly)
    Do While Not rsO.EOF
    Set tempNode = tv.Nodes.Add("CL" & rsC.Fields(ID_Azienda), tvwChild, "ORD" & rsO.Fields(ID_Ordine), rsO.Fields("Ordine"))
    rsO.MoveNext
    Loop
    rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
  • Re: Treeview errore 3464

    C'è una gran confusione ...

    Ripeto ... Se id_ordine è numerico allora NON devi usare le virgolette. Non fare tentativi a caso con le virgolette. Correggi il codice e vediamo glu altri errori che possono esserci per altri motivi.

    Ho notato che a volte hai scritto rs0 e non rsO (confondi lo 0 con la O )

    Metti a posto e mostra UN solo codice corretto con eventuali errori.
  • Re: Treeview errore 3464

    luca3.34 ha scritto:


    TREE VIEW CON NOMI AZIENDE
    • ID_Azienda ?Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome")) -? errore su Private Sub Comando2_Click() ? variabile non definita ? per risolverlo devo eliminare Option Explicit ? a questo punto il treeview si popola con i nome delle aziende
    • “ID_Azienda”? ……… rsC.Fields(“ID_Azienda”)………… ? mantengo Option Explicit e il tree view si popola con i nomi della aziende. Se tolgo Option Explicit il tree view si popola comunque con con i nomi d’azienda

    TREE VIEW CON NOMI ORDINI

    ERRORE 91 --> tra apici metto gli ID ed elimino Option Explicit --> errore su Do While Not rsO.EOF
    Option Compare Database
    
    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture
    
    tv.Nodes.Clear
    
    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
        Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields("ID_Azienda"), rsC.Fields("Nome"))
        'CARICO GLI ORDINI
        Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)
        Do While Not rsO.EOF
            Set tempNode = tv.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwChild, "ORD" & rsO.Fields("ID_Ordine"), rsO.Fields("Ordine"))
            
        rsO.MoveNext
        Loop
        rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
    Errore di compilazione variabile non definita --> con ID_.... tra “” --> errore su Private Sub Comando2_Click()
    Option Compare Database
    Option Explicit
    
    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture
    
    tv.Nodes.Clear
    
    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
        Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields("ID_Azienda"), rsC.Fields("Nome"))
        'CARICO GLI ORDINI
        Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)
        Do While Not rsO.EOF
            Set tempNode = tv.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwChild, "ORD" & rsO.Fields("ID_Ordine"), rsO.Fields("Ordine"))
        rsO.MoveNext
        Loop
        rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
    Errore di compilazione variabile non definita ? senza “” --> tolgo gli apici come mi è stato detto --> errore su Private Sub Comando2_Click()
    Option Compare Database
    Option Explicit
    
    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture
    
    tv.Nodes.Clear
    
    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
        Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome"))
        'CARICO GLI ORDINI
        Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields(ID_Azienda) & """ ORDER BY Ordine DESC", , dbReadOnly)
        Do While Not rsO.EOF
            Set tempNode = tv.Nodes.Add("CL" & rsC.Fields(ID_Azienda), tvwChild, "ORD" & rsO.Fields(ID_Ordine), rsO.Fields("Ordine"))
        rsO.MoveNext
        Loop
        rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
    Errore 3265 --> ID_... senza apici e tolgo Option Explicit --> erorre su Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome"))
    Option Compare Database
    
    Private Sub Comando2_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset 'record clienti
    Dim rsO As DAO.Recordset 'record ordini
    Dim rsF As DAO.Recordset 'record fatture
    
    tv.Nodes.Clear
    
    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda,Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
        Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome"))
        'CARICO GLI ORDINI
        Set rs0 = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine FROM Ordine WHERE ID_Azienda=""" & rsC.Fields(ID_Azienda) & """ ORDER BY Ordine DESC", , dbReadOnly)
        Do While Not rsO.EOF
            Set tempNode = tv.Nodes.Add("CL" & rsC.Fields(ID_Azienda), tvwChild, "ORD" & rsO.Fields(ID_Ordine), rsO.Fields("Ordine"))
        rsO.MoveNext
        Loop
        rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
    Calma e debug. (credo che nessuno di noi usi stecca e gesso per VBA)
    PRIMO: inizia ad usare i tag CODE per racchiudere il codice. Ti ho quotato quasi per intero mettendo i tag code dove andavano messi.
    SECONDO: Per le ragioni espresse qui https://www.iprogrammatori.it/forum-programmazione/access/treeview-error-t30624-15.html#p8572375 quindi d'ora in avanti si ragiona solo su codice che ha Option Explicit e si risolvono prima i problemi di variabili non dichiarate e poi quello che viene.
    Ed eccoci alla sostanza della variabile non dichiarata: cos'è [tv]?
  • Re: Treeview errore 3464

    Sembrerà una frase di circostanza ma voglio veramente ringraziarvi per il supporto e la disponibilità che mi state dando
    Grazie Phil per il tag Code fatto

    tv è il Nome elemento che ho dato al controllo treeview.
    Confermo che d'ora in poi Option Explicit è sempre presente

    Tutti quei campi delle tabelle che contengono numeri non hanno più apici. Tutti gli altri campi che sto usando sono o testo oppure data/ora.
    Confermo che se un campo è della seria Campo Prova, nella query è scritto così [Campo Prova].

    Fatto ciò l'errore che esce è: Variable not defined, Office Shared [vblr6.chm1040111]

    Sul messaggio d'errore che esce clicco OK e viene:
    - evidenziato in giallo: Private Sub cmdCaricaTreeView_Click() ----> nell'esempio qui sopra è questo Private Sub Comando2_Click()
    - evidenziato in blu solo ID_Azienda qui dentro: Set tempNode = TV.Nodes.Add("C", tvwchild, "CL" & rsC.Fields(ID_Azienda), rsC.Fields("Nome")) ---> è il primo, oso dire livello, del treeview

    Azienda --> Ordine --> Fattura
  • Re: Treeview errore 3464

    E' nella SELECT che non vanno gli apici ma in quella riga sì ...

    .Fields("ID_Azienda")
  • Re: Treeview errore 3464

    Buongiorno a tutti,
    ho applicato tutto ciò che avete detto e l'errore che ottengo è il 3464: Tipi di dati non corrispondenti nell'espressione criterio. Tale errore lo ottengo nella parte di caricamento ORDINI, nello specifico nella parte in cui c'è la SELECT.
    Anche cercando online su vecchi argomenti simili non riesco a trovare la soluzione.

    Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)

    PS. ho aggiunto rispetto a prima nella SELECT anche ID_Azienda ma non è cambiato nulla

    Se vi può servire questi sono i dati delle tabelle:
    Azienda: ID_Azienda (Numerazione automatica), Nome (Testo Breve)
    Ordine: ID_Ordine (Numerazione automatica), Ordine (Testo Breve), ID_Azienda (Numerico)
    Fattura: ID_Fattura (Numerazione automatica), NomeFattura(Testo Breve), ID_Ordine(Numerico)

    Nel momento che la parte di caricamento ordini la metto come commento il tree view funziona, magrissima consolazione.

    Questo è il codice:
    
    Option Compare Database
    Option Explicit
    
    Private Sub cmdCaricaTreeView_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset
    Dim rsO As DAO.Recordset
    Dim rsF As DAO.Recordset
    
    tv.Nodes.Clear
    
    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    
    CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda, Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
        Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields("ID_Azienda"), rsC.Fields("Nome"))
        'CARICO GLI ORDINI
        Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)
        Do While Not rsO.EOF
            Set tempNode = tv.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwChild, "ORD" & rsO.Fields("ID_Ordine"), rsO.Fields("Ordine"))
        rsO.MoveNext
        Loop
        rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
    
    
  • Re: Treeview errore 3464

    luca3.34 ha scritto:


    ...
    ...
        Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)
    ...

    oregon ha scritto:


    C'è una gran confusione ...
    Ripeto ... Se id_ordine è numerico allora NON devi usare le virgolette. Non fare tentativi a caso con le virgolette...
    Sto facendo un gran uso di quote... hai già tutte le "risposte" solo che non le capisci o ti fai prendere troppo dalla foga di tentativi e ti perdi.
    Ricorda quanto detto nell'altro thread: vuoi vedere com'è una sql di apertura del recordset ai fini di un bel debug?
    Dim strSQL as String
    strSQL = "SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC"
    Debug.Print strSQL
    Set rsO = CurrentDB.OpenRecorset(strSQL, , dbReadOnly)
    ...
    
    e ritrovi nella finestra immediata che
    ... WHERE ID_Azienda="1" ORDER BY ...
    e no va bene
    Devi capire dove gli apici servono perché accedi al un campo del recordset (indipendentemente dal tipo di dato che contiene) e dove stai costruendo una query con una WHERE condition che, come da manuale SQL, vuole i giusti delimitatori a seconda del tipo di dato: niente, apici o cancelletti
  • Re: Treeview errore 3464

    Philcattivocarattere ha scritto:


    luca3.34 ha scritto:


    ...
    ...
        Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC", , dbReadOnly)
    ...

    oregon ha scritto:


    C'è una gran confusione ...
    Ripeto ... Se id_ordine è numerico allora NON devi usare le virgolette. Non fare tentativi a caso con le virgolette...
    Sto facendo un gran uso di quote... hai già tutte le "risposte" solo che non le capisci o ti fai prendere troppo dalla foga di tentativi e ti perdi.
    Ricorda quanto detto nell'altro thread: vuoi vedere com'è una sql di apertura del recordset ai fini di un bel debug?
    Dim strSQL as String
    strSQL = "SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordine DESC"
    Debug.Print strSQL
    Set rsO = CurrentDB.OpenRecorset(strSQL, , dbReadOnly)
    ...
    
    e ritrovi nella finestra immediata che
    ... WHERE ID_Azienda="1" ORDER BY ...
    e no va bene
    Devi capire dove gli apici servono perché accedi al un campo del recordset (indipendentemente dal tipo di dato che contiene) e dove stai costruendo una query con una WHERE condition che, come da manuale SQL, vuole i giusti delimitatori a seconda del tipo di dato: niente, apici o cancelletti

    Provo a cercare di capire quest'ultima cosa anche se ho veramente poca esperienza con la programmazione. Speriamo.
    Avrò i miei limiti nella programmazione ma mi domando com'è possibile prendere un esempio da youtube con tanto di spiegazione pari pari, medesimo database, sul video funziona e da me no. E il codice utilizzato, campi, nome tabelle etc etc è lo stesso. Perdonate lo sfogo ma questo è ciò che mi ha sempre tenuto a distanza dalla programmazione
  • Re: Treeview errore 3464

    luca3.34 ha scritto:


    ...
    Perdonate lo sfogo ma questo è ciò che mi ha sempre tenuto a distanza dalla programmazione
    Perché forse la programmazione non si impara dai video su youtube? con tutto il rispetto per gli autori di quei video. Le cose veramente importanti si imparano "sui libri" (che poi possono essere anche file pdf, in formato elettronico, tutto quello che vuoi) ma prima di tutto è "roba scritta" (tanta e bene). Poi su alcuni passaggi i video sono utili. Agli albori della mia passione per l'informatica i video non c'erano ed effettivamente "vedere" come andavano fatte alcune operazioni poteva aiutare, più delle fotografie sui testi. Prima però serve "la base" (più o meno tosta, dipende da quello che uno vuole fare) e poi... mettici youtube se vuoi ma troverai molto di più nelle "parole" che nelle "immagini".
    Per restare al caso concreto: al 99,99% ID_Azienda è numerico (non ho il db da esaminare ma non ha senso che non lo sia).
    Una query dove il criterio è
    WHERE ID_Azienda = "1"
    non potrà mai funzionare perché il campo ID_Azienda è numerico, racchiudere il numero 1 tra apici lo qualifica come testo quindi il programma trova discrepanza tra il contenuto del campo e quello che si cerca in esso. Queste sono nozioni base di SQL, siamo ancora lontani dalla programmazione. Certo, Access in modalità grafica, quando fai le query, ci mette "la pezza" se sbagli, mettendo i delimitatori giusti se non li scrivi. Ma li mette e te li mostra, sta a te poi ricordare quali sono quelli giusti ed usarli in futuro, ad esempio proprio in vba dove questo aiuto non c'è.
    Perché qui
    ... rsC.Fields("ID_Azienda") ... 
    gli apici servono? Perché è tutt'altra questione. Quella è la sintassi per accedere ad un elemento specifico di una collection (in questo caso la collection è Fields e all'interno di questa collection cerchi il Field che si chiama ID_Azienda), indipendentemente dal tipo di dato contenuto nell'elemento della collection. Questo si impara studiando.
  • Re: Treeview errore 3464

    luca3.34 ha scritto:


    ...
    Provo a cercare di capire quest'ultima cosa anche se ho veramente poca esperienza con la programmazione. Speriamo.
    Avrò i miei limiti nella programmazione ma mi domando com'è possibile prendere un esempio da youtube con tanto di spiegazione pari pari, medesimo database, sul video funziona e da me no. E il codice utilizzato, campi, nome tabelle etc etc è lo stesso. Perdonate lo sfogo ma questo è ciò che mi ha sempre tenuto a distanza dalla programmazione
    Il problema è che YOUTUBE è uno strumento INUTILE in questo campo, perchè se pensi di COPIAINCOLLARE senza metterci nulla... di certo non si impara e non vai da nessuna parte, poi come ti sei accoerto, basta una cavolate di cui non hai sensibilità, un nome uno spazio, un accento... e PUFFF....

    Quindi se vuoi CAPIRE, devi studiare le basi di programmazione,e poi a seconda di quanto sei "SVELTO", e questo è soggettivo, servirà più o meno tempo con esperienza pratica sbattendoci la testa per consolidare i concetti...!

    La programmazione è come la MATEMATICA... se la sai la capisci e la sfrutti, se non la sai ti infastidisci e copi... ma è una disciplina talmente DEFINITA che non ha margini di errore... l'errore è di chi non la conosce.
  • Re: Treeview errore 3464

    Ok, mi sono accorto delle ultime sviste. Sono veramente provato.
    Questa è la mia ultima versione. Se se potete cortesemente concedermi l'esempio funzionante forse potrei capire dove sbaglio, in caso contrario non so dove andare a parare. Sto studiando VBA ma il treeview mi serviva praticamente l'altro ieri.
    L'errore che ottengo è un errore di compilazione: errore di sintassi.
    Viene evidenziato in giallo Private Sub cmdCaricaTreeView_Click()
    e Set rsO= CurrentDb.......... viene colorato in rosso.

    Grazie

    Option Compare Database
    Option Explicit
    
    Private Sub cmdCaricaTreeView_Click()
    Dim tempNode As MSComctlLib.Node
    Dim rsC As DAO.Recordset
    Dim rsO As DAO.Recordset
    Dim rsF As DAO.Recordset
    
    tv.Nodes.Clear
    
    Set tempNode = tv.Nodes.Add(, , "C", "Azienda")
    
    'CARICO I NOMI DELLE AZIENDE
    Set rsC = CurrentDb.OpenRecordset("SELECT ID_Azienda, Nome FROM Azienda ORDER BY Nome", , dbReadOnly)
    Do While Not rsC.EOF
        Set tempNode = tv.Nodes.Add("C", tvwChild, "CL" & rsC.Fields("ID_Azienda") & "</ID>", rsC.Fields("Nome"))
        'CARICO GLI ORDINI
        Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda="" & rsC.Fields("ID_Azienda") & "" ORDER BY Ordine DESC", , dbReadOnly)
        Do While Not rsO.EOF
            Set tempNode = tv.Nodes.Add("CL" & rsC.Fields("ID_Azienda") & "</ID>", tvwChild, "ORD" & rsO.Fields("ID_Ordine") & "</ID>", rsO.Fields("Ordine"))
        rsO.MoveNext
        Loop
        rsO.Close
    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
  • Re: Treeview errore 3464

    Ti è stato detto, alla PRIMISSIMA risposta, che essendo NUMERICO il campo ID_Azienda non servono gli APICI... perchè continui ad INSERIRLI...?
    Leggi ed ascolti quello che ti viene Suggerito oppure no...?
    Parlo di questo:
    Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda="" & rsC.Fields("ID_Azienda") & "" ORDER BY Ordine DESC", , dbReadOnly)
    Da modificare così:
    Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=" & rsC.Fields("ID_Azienda") & " ORDER BY Ordine DESC", , dbReadOnly)
  • Re: Treeview errore 3464

    Ammetto che non avevo inteso anche li le " ", pensavo che come fosse scritto fosse già ok.. Comunque già ieri avevo provato tra le varie possibilità anche questa da te suggerita.
    Mettendo il codice come mi dici ottengo sull'istruzione qui sotto l'errore di run time '3061'. Parametri insufficienti. Previsto 1.
    Facendo le varie query dentro al db con acccess tutto gira facile facile, quindi il db per me funziona.
    Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordine, Ordine, ID_Azienda FROM Ordine WHERE ID_Azienda=" & rsC.Fields("ID_Azienda") & " ORDER BY Ordine DESC", , dbReadOnly)
Devi accedere o registrarti per scrivere nel forum
20 risposte