TreeView error

di il
19 risposte

TreeView error

Buongiorno,
utilizzo Access 2016 e avrei necessità di utilizzare un treeview.
Ho provato anche a replicare degli esempi presi da internet ma il sistema non funziona.
Di per sè VBA funziona e nel momento che scrivo vengono suggeriti in automatico i comandi quindi o è stato cambiato il comando per quello che cerco oppure proprio non saprei.

Questo è ciò che ho fatto --> creo maschera vuota --> modalità struttura, progettazione, controlli ActiveX --> CTreeView Control (fino alla versione 2013 da che ho capito il comando era invece MICROSOFT TREEVIEW CONTROL) --> inserisco il treeview nella maschera vuota.

Creo i vari codici che mi servono MA nel momento che creo la variabile per fare riferimento a ciascun nodo mi da errore.

Dim Nodo As MSComctlLib.Node

Detto in parole povere dopo as tra la miriade di possibili suggerimenti non compare MSComctlLib.Node.

Ho cercato degli esempi per access 2016 per vedere se era cambiato qualcosa ma non ho trovato niente.

L'errore che ottengo è il seguente: Errore di compilazione, Tipo non definito dall'utente non definito.

Avete qualche idea?

Grazie

19 Risposte

  • Re: TreeView error

    luca3.34 ha scritto:


    ...
    Dim Nodo As MSComctlLib.Node
    ...
    Probabilmente si tratta dei Riferimenti alle librerie. Guarda se in VBE - Strumenti - Riferimenti cosa trovi scritto? Qui c'è da sbizzarrirsi per capire qual è quello giusto.
    Hai creato il tutto con Access 2013 ed ora lo stai usando sul 2016? Che versione di Access è? a 32 bit? Su quale sistema operativo, 32 o 64 bit? Crea una maschera di prova, eventualmente, vuota, aggiungi un controllo tree view e guarda se in automatico sono è stato aggiunto un riferimento ad una nuova libreria.
  • Re: TreeView error

    Utilizzo access 2016 64 bit e il SO è quindi 64 bit (windows 7 professional).
    Il database è stato creato totalmente con questa versione di access.
    Il riferimento al 2013 è stato fatto perchè è la versione più vicina, ma non ho creato nulla con esso.

    Creando una nuova maschera come hai suggerito i riferimenti non cambiano.

    Sono questi:
    - visual basic for applications
    - microsoft access 16 object library
    - ole automation
    - microsoft office 16.0 access database engine object library
    - ctv ole control module
  • Re: TreeView error

    luca3.34 ha scritto:


    Utilizzo access 2016 64 bit e il SO è quindi 64 bit (windows 7 professional).
    ...
    Pessime notizie: da quanto ne so Access (qualsiasi versione) a 64bit non supporta i controlli ActiveX, compreso quindi il TreeView.
  • Re: TreeView error

    Philcattivocarattere ha scritto:


    luca3.34 ha scritto:


    Utilizzo access 2016 64 bit e il SO è quindi 64 bit (windows 7 professional).
    ...
    Pessime notizie: da quanto ne so Access (qualsiasi versione) a 64bit non supporta i controlli ActiveX, compreso quindi il TreeView.
    Eh che è brutta me ne sto accorgendo... comunque Porco Diavolo....
    Credo che manchi proprio la libreria mscomctl.ocx. In riferimenti non c'è nessun MSC... e anche cercando in tutto C mscomctl.ocx non trovo nulla.
    Il problema che ci sono una marea di siti che permettono di scaricarla (o cosi sembra) ma danno l'idea di essere tutto fuorchè affidabili.

    Cmq pensa te se uno deve essere bloccato per una minchiata del genere -.-
  • Re: TreeView error

    Philcattivocarattere ha scritto:


    luca3.34 ha scritto:


    Utilizzo access 2016 64 bit e il SO è quindi 64 bit (windows 7 professional).
    ...
    Pessime notizie: da quanto ne so Access (qualsiasi versione) a 64bit non supporta i controlli ActiveX, compreso quindi il TreeView.
    Premetto che non sono un guro dei pc, però in riferimenti trovo diverse versioni di activeX, dalla 2 alla 6 mi pare.
    A questo punto, se secondo te la 64 bit non supporta active x come potrei sviluppare un treeview?
    Mi sembra illogico che lo inseriscano e non lo posso usare

    PS. il pc è stato formattato e reinstallato tutto lo scorso week end quindi errori non dovrebbe averne
  • Re: TreeView error

    luca3.34 ha scritto:


    ...
    Cmq pensa te se uno deve essere bloccato per una minchiata del genere
    Che alcuni controlli (anche di uso molto frequente) non siano supportati nelle versioni a 64bit di Office è cosa nota fin da Office 2010.

    Quindi non è tanto il fatto che manchi quel file, che si possa scaricare da qualche parte e/o installare. Ammesso che con qualche "artifizio" (informatico, intendo) si riescano ad utilizzare, trattandosi di "componenti attivi" ufficialmente non supportati, ci si espone a rischi per la sicurezza notevoli.
    Per lo stesso motivo valutare bene le alternative gratuite che si trovano sul web (avevo cercato anch'io, a suo tempo). Poi ci sono i prodotti a pagamento e per gli stessi motivi deve trattarsi di prodotti affidabili e fidati.
  • Re: TreeView error

    Philcattivocarattere ha scritto:


    luca3.34 ha scritto:


    ...
    Cmq pensa te se uno deve essere bloccato per una minchiata del genere
    Che alcuni controlli (anche di uso molto frequente) non siano supportati nelle versioni a 64bit di Office è cosa nota fin da Office 2010.

    Quindi non è tanto il fatto che manchi quel file, che si possa scaricare da qualche parte e/o installare. Ammesso che con qualche "artifizio" (informatico, intendo) si riescano ad utilizzare, trattandosi di "componenti attivi" ufficialmente non supportati, ci si espone a rischi per la sicurezza notevoli.
    Per lo stesso motivo valutare bene le alternative gratuite che si trovano sul web (avevo cercato anch'io, a suo tempo). Poi ci sono i prodotti a pagamento e per gli stessi motivi deve trattarsi di prodotti affidabili e fidati.
    Capisco

    Forse sarà una domanda banale, ma ti chiedo una gentilezza.
    A questo punto, come caspita posso riuscire ad utilizzare il treeview?
    Essendo un non addetto dei lavori forse non sarò sul "pezzo", mi sembra però un'assurdità inserire un comando (treeview) e non poterlo usare
    non c'è qualche modo alternativo per riuscirlo ad usare?
  • Re: TreeView error

    luca3.34 ha scritto:


    ...
    A questo punto, come caspita posso riuscire ad utilizzare il treeview?
    Sono sempre stato lontano dalle versioni a 64bit di Office (tra le altre cose) per non trovarmi nella tua situazione e non so dirti per quale motivo il controllo è "inseribile" ma non usabile. L'unica è usare Access a 32 bit. Se la domanda è: ci sono alternative non Microsoft? vedi sopra.
  • Re: TreeView error

    Philcattivocarattere ha scritto:


    luca3.34 ha scritto:


    ...
    A questo punto, come caspita posso riuscire ad utilizzare il treeview?
    Sono sempre stato lontano dalle versioni a 64bit di Office (tra le altre cose) per non trovarmi nella tua situazione e non so dirti per quale motivo il controllo è "inseribile" ma non usabile. L'unica è usare Access a 32 bit. Se la domanda è: ci sono alternative non Microsoft? vedi sopra.
    Grazie per la risposta

    Confermo ciò che dici https://support.office.com/en-gb/article/Choose-the-32-bit-or-64-bit-version-of-Office-ca3253e5-ac01-4242-8a64-b56111a6f32d

    Detto ciò, non mi esprimo......
  • Re: TreeView error

    Puoi valutare questo:
    http://www.jkp-ads.com/Articles/treeview.as
    http://excel-access-programmer.com/smart-treeview-control-for-64bit-office/

    Il primo Link è il più famoso... vedi tu...
  • Re: TreeView error

    @Alex ha scritto:


    Puoi valutare questo:
    http://www.jkp-ads.com/Articles/treeview.as
    http://excel-access-programmer.com/smart-treeview-control-for-64bit-office/

    Il primo Link è il più famoso... vedi tu...

    Ti ringrazio per i suggerimenti, avevo trovato anche io il primo link.
    Ho risolto cambiando da 64 a 32 bit. A questo punto preferisco evitare altre possibili complicazioni
  • Re: TreeView error

    Buonasera vi chiedo un ulteriore aiuto.
    Ho creato alcuni tree view senza problemi solo che adesso non riesco più a procedere con l'attuale DB.
    Ciò che mi servirebbe ottenere è un tree view di questa serie:
    Azienda
    Ordini
    Fatture


    Azienda riesco ad ottenerla ma Ordini no. Mi sono fermato qui in quanto anche fatture sono sicuro riporti il medesimo errore.
    Per inciso o è attivo il codice rosso oppure quello blu.

    Se è attiva l'istruzione rossa ottengo l'errore 3075 --> questo è ciò che ho scritto fin dall'inizio
    Se attivo il blu ottengo questo errore: errore di run time 3464 --> ho provato quindi a importare l'istruzione creata direttamente tramite il wizard di access.


    Questo è il codice
    -------------------------------------------------------------------------------------------------------------------
    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, Azienda FROM Azienda ORDER BY Azienda", , dbReadOnly)
    Do While Not rsC.EOF
    Set tempNode = TV.Nodes.Add("C", tvwchild, "CL" & rsC.Fields("ID_Azienda"), rsC.Fields("Azienda"))

    ' Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordini, Numero Ordine, Data Ordine FROM Ordini WHERE ID_Azienda =""" & rsC.Fields("ID_Azienda") & """ ORDER BY Data Ordine DESC ", , dbReadOnly)
    Set rsO = CurrentDb.OpenRecordset("SELECT Ordini.ID_Ordini, Ordini.[Numero Ordine], Ordini.[Data Ordine], Ordini.ID_Azienda FROM Ordini WHERE Ordini.ID_Azienda=""" & rsC.Fields("ID_Azienda") & """ ORDER BY Ordini.[Data Ordine] DESC", , dbReadOnly)

    Do While Not rsO.EOF
    ' Set tempNode = TV.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwchild, "O" & rsO.Fields("ID_Ordini"), rsO.Fields("Numero Ordine"))
    Set tempNode = TV.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwchild, "O" & rsO.Fields("Ordini.ID_Ordini"), rsO.Fields("Ordini.[Numero Ordine]"))
    rsO.MoveNext
    Loop
    rsO.Close
    rsC.MoveNext
    Loop

    rsC.Close

    End Sub
    ------------------------------------------------

    Cerco di darvi un'idea parziale del database.

    Azienda 1 a molti Ordini
    Azienda 1 a molti Fatture --> purtroppo devo poter gestire che mi arrivi una fattura senza che sia associata ad un'ordine
    Ordini 1 a molti Fatture
    Ordini molti a molti Preventivi --> preventivi non mi interessa nel treeview
    Fattura molti a molti DDT
    Ordini Molti a molti DDT

    Grazie
  • Re: TreeView error

    luca3.34 ha scritto:


    ...
    Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordini, Numero Ordine, Data Ordine FROM Ordini WHERE ID_Azienda =""" & rsC.Fields("ID_Azienda") & """ ORDER BY Data Ordine DESC ", , dbReadOnly)
    Run-time error 3075: Sintax error (Missing Operator) in Query. Quindi sta tutto nella stringa che usi per l'apertura del recordset.
    Balza subito agli occhi l'indicazione di campi il cui nome contiene spazi e quindi devono essere racchiusi tra parentesi quadrate.
    Se il problema non si risolve, solita trafila
    
    Dim strSQL as String
    strSQL = "SELECT ID_Ordini, [Numero Ordine], [Data Ordine] FROM Ordini WHERE ID_Azienda =""" & rsC.Fields("ID_Azienda") & """ ORDER BY Data Ordine DESC"
    Debug.Pring strSQL
    
    così vedi la "vera" sql di apertura del recordset e vediamo se manca ancora qualcosa.
    Prima di affrontare l'errore "in blu" vediamo come va questo. Occhio perché da un "TreeView error" (per incompatibilità di versione) siamo passati a tutt'altro problema. Se la questione prosegue forse è il caso di aprire un nuovo thread.
  • Re: TreeView error

    Philcattivocarattere ha scritto:


    luca3.34 ha scritto:


    ...
    Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordini, Numero Ordine, Data Ordine FROM Ordini WHERE ID_Azienda =""" & rsC.Fields("ID_Azienda") & """ ORDER BY Data Ordine DESC ", , dbReadOnly)
    Run-time error 3075: Sintax error (Missing Operator) in Query. Quindi sta tutto nella stringa che usi per l'apertura del recordset.
    Balza subito agli occhi l'indicazione di campi il cui nome contiene spazi e quindi devono essere racchiusi tra parentesi quadrate.
    Se il problema non si risolve, solita trafila
    
    Dim strSQL as String
    strSQL = "SELECT ID_Ordini, [Numero Ordine], [Data Ordine] FROM Ordini WHERE ID_Azienda =""" & rsC.Fields("ID_Azienda") & """ ORDER BY Data Ordine DESC"
    Debug.Pring strSQL
    
    così vedi la "vera" sql di apertura del recordset e vediamo se manca ancora qualcosa.
    Prima di affrontare l'errore "in blu" vediamo come va questo. Occhio perché da un "TreeView error" (per incompatibilità di versione) siamo passati a tutt'altro problema. Se la questione prosegue forse è il caso di aprire un nuovo thread.
    A questo punto penso che sia il programma ad avere qualche problema.
    Allora ho scritto come mi hai suggerito ma permane l'errore 3075.
    - Set rsO = CurrentDb.OpenRecordset("SELECT ID_Ordini, [Numero Ordine], [Data Ordine] FROM Ordini WHERE ID_Azienda =""" & rsC.Fields("ID_Azienda") & """ ORDER BY Data Ordine DESC", , dbReadOnly)
    - Set tempNode = TV.Nodes.Add("CL" & rsC.Fields("ID_Azienda"), tvwchild, "O" & rsO.Fields("ID_Ordini"), rsO.Fields("[Numero Ordine]"))

    Ho poi eseguito il Dim strSQL as String e nella finestra immediata ottengo questo ---> SELECT ID_Ordini, [Numero Ordine], [Data Ordine] FROM Ordini WHERE ID_Azienda ="1" ORDER BY Data Ordine DESC

    Ho provato per disperazione a creare un esempio copiato da questo video https://www.youtube.com/watch?v=6q32hSeWbJ (tale esempio conta di 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

    Anche in questo caso il sistema si blocca sempre al medesimo punto

    ----------------------------
    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




    rsC.MoveNext
    Loop
    rsC.Close
    End Sub
Devi accedere o registrarti per scrivere nel forum
19 risposte