Newsgroup: it.comp.appl.access
Titolo: Costruzione di Treeview su Tabella e Query

Un saluto a tutto il NG.
Mi sto "cementando" con la costruzione di un treeview basato su un unica
tabella ed una query su di essa.
La radice, la riempie correttamente, mentre per il secondo livello al punto
segnato mi restituisce "Invalid Obj, err. 35610".
Potreste spiegarmi perchč? Grazie, Claudio
P.S. Il campo chiave č di testo, quello data č Data/ora, e nel debug, se
passo con il mouse sui vari valori "sembrano" congruenti.
==============================================
Private Sub Form_Load()
 Dim db As Database, rs, rs2 As Recordset
  Set db = CurrentDb
  Set rs = db.OpenRecordset("ScadenzeQ", dbOpenForwardOnly)
  Set chiave = rs!Fornitore
  Set Etichetta = rs!Fornitore
    Do Until rs.EOF
     Me.TreeView0.Nodes.Add , , chiave, rs!Fornitore
    rs.MoveNext
   Loop
  rs.Close
   Set rs2 = db.OpenRecordset("Scadenze", dbOpenForwardOnly)
   Set chiave = rs2!Fornitore
   Set Etichetta = rs2!Datascadenza
    Do Until rs2.EOF
**** Me.TreeView0.Nodes.Add chiave, tvwChild, , Etichetta****
    rs2.MoveNext
Loop
rs2.close
End Sub

 ha scritto nel messaggio
news:MsLRb.156050$VW.63...@news3.tin.it...

Ciao, ggac.
    Molto velocemente... se scrivi:
        Me.TreeView0.Nodes.Add chiave.Value, tvwChild, , Etichetta.Value
funziona?
-- 
Ciao :o)
Maurizio Borrelli, Microsoft MVP Access
--------
?SPQR(C)
 X
--------

 funziona?
In maniera perfetta.
Scusate il ritardo con cui rispondo, ma ho avuto una mattina scatologica.
Se non approfitto della Vostra pazienza potrei sapere perchè necessita del
.Value?

 .Value?
Ciao, ggac.
    Perche' chiave e Etichetta sono degli oggetti di tipo DAO.Field. Quando
li passi come argomenti al metodo Add di Nodes... quello ci rimane male
perche' si aspetta altro: stringhe o oggetti di tipo Node. Allora tu,
gentilmente, invece di passare l'oggetto passerai il valore della proprieta'
Value dell'oggetto Field, e Nodes.Add sara' contento! ;-)
    Pero', in amicizia, sarebbe bene che tu ti dessi una regolata,
approfondendo un po' il Visual Basic perche' lo scrivi in maniera un po'
rischiosa per la tua serenita'. Vediamo il codice in questione:
Private Sub Form_Load()
 Dim db As Database, rs, rs2 As Recordset
  Set db = CurrentDb
  Set rs = db.OpenRecordset("ScadenzeQ", dbOpenForwardOnly)
  Set chiave = rs!Fornitore
  Set Etichetta = rs!Fornitore
    Do Until rs.EOF
     Me.TreeView0.Nodes.Add , , chiave, rs!Fornitore
    rs.MoveNext
   Loop
  rs.Close
   Set rs2 = db.OpenRecordset("Scadenze", dbOpenForwardOnly)
   Set chiave = rs2!Fornitore
   Set Etichetta = rs2!Datascadenza
    Do Until rs2.EOF
**** Me.TreeView0.Nodes.Add chiave, tvwChild, , Etichetta****
    rs2.MoveNext
Loop
rs2.close
End Sub
    Qui si capisce che quando scrivi:
        Dim db As Database, rs, rs2 As Recordset
ti aspetteresti di aver dimensionato un oggetto Database e due oggetti
Recordset. Invece vb interpreta come se tu avessi scritto:
        Dim db As Database, rs As Variant, rs2 As Recordset
    E' anche opportuno dimensionare in modo completo gli oggetti:
        Dim db As DAO.Database, rs As DAO.Recordset, rs2 As DAO.Recordset
e se, come auspicabile, ti deciderai a usare Option Explicit, dovrai anche
scrivere:
        Dim chiave As DAO.Field, Etichetta As DAO.Field
concludendo la routine con la distruzione delle variabili oggetto:
            Set chiave = Nothing
            Set Etichetta = Nothing
            Set rs2 = Nothing
            Set rs = Nothing
            Set db = Nothing
        End Sub


Maurizio Borrelli ha scritto nel messaggio

Tutto perfettamente chiaro, ti ringrazio delle osservazioni,
Accolgo in pieno le obiezioni sulla scrittura del codice, scritto a mia
parziale discolpa
"al volo" e con il solo intento di prova. Grazie dell'attenzione. Claudio