Treevieuw pour base de donées

Contenu du snippet

Le TreeVieuw (control type explorateur)est utilisé pour explorer et trier une base de donnée (ou autre).Arborescence utile qui élimine plusieurs requètes de trie.

Source / Exemple :


'***********ce code fonctione trés bien sur mes bases de données)*******************
'***********je prévient ce qui desir mettre leur nez là dedans        *******************
'***********meme pour moi ce code devient  compliqué                *******************
'***********je l'ai mis a jour au fur est a mesure de mes besoins   *******************
'***********et par moment j'ai de la dificultée a mis retrouver       ********************
'**********" mais bon ca marche                                                *******************
'***********j'accepte toutes critiques a condition qu'elles soit constructives************
'***********'je n'ai pas mis mon propre code car il faudrais mes bases ***********
'********** de plus aider ne veut pas dire faire le boulot************************
'***************************************************************************
'***************************************************************************
'***************************************************************************

Private Sub Affiche_Treevieuw()

'===========================================================
'Definition des base de donnée
'dans mon exemple, j'ai trié mes base de donnée en trois partie
'afin d'accélerer les recherches
'une base principale qui regroupe les enregistrement,et 2 autres qui permetent d'enregistrer les nouvel enregistrement
    ' Deuxieme serait = secteur d'activité (Theatre ,cinema,foire cirque etc..)
    'troisieme serait = lieu ou autre  bien sur 'pour moi j'utilise ce treevieuw dans le domaine du batiment !!
    'il suffit de creer une base de donnée Nommé :"artiste (par exemple)
    ' y inclure une table qui concerne le premier index de recherche et qui regroupe toutes les données
    'et deux autres (Deuxieme et troisieme table) qui enregistre differente donnée et qui permete de faire d'autre recherche
    
    Set deuxiemeIndex = mDbBiblio.OpenRecordset("deuxieme", dbOpenDynaset)
    Set RsArtiste = mDbBiblio.OpenRecordset("Artiste", dbOpenDynaset)
    Set TroiziemeIndex = mDbBiblio.OpenRecordset("Troizieme", dbOpenDynaset)
'=======================================================================
prgLoad.Visible = True
sbrDB.Style = sbrSimple
            'ouverture de la la MDB et fait une boucle sur le premier index (num_id=1)
            Do Until RsArtiste.EOF
                Set mNode = tvwDB.Nodes.Add(1, tvwChild, RsArtiste!fo_num_id _
                        & " NUM_ID", CStr(RsArtiste!fo_nom), "closed")
                    mNode.Tag = "Artiste"
'====================Recherche du deuxieme index de l'arborescence====================
                    'passage pour utiliser un ordre de trie <> (pas indispensable)
                    'utiliser l'un ou l'autre criterre de recherche
        If RsArtiste!fo_num_id <> 1 Then
            Set TroiziemeIndex = mDbBiblio.OpenRecordset _
                    ("Select * From Troizieme Where Num_ID= " & RsArtiste!fo_num_id _
                            & " order by deuxieme asc")
            Else
'****************Modif ordre de trie**************************************************
            Set TroiziemeIndex = mDbBiblio.OpenRecordset _
                    ("Select * From Troizieme Where st_ref= " & RsArtiste!fo_num_id _
                            & " order by deuxieme asc,ral desc")
        End If
'***********************************************************************************************
 nb_tmp = TroiziemeIndex.RecordCount                        'Calcule le Nb d'enreg pour la boucle
            If nb_tmp = 0 Then GoTo suite                   'si nb_tmp = 0 passe
intIndex = mNode.Index                                      'Conserve l'index pour l'arborescence
ID_Artiste = intIndex
'====================Recherche deuxiemeS Artiste===========
Retour:
                    
                Tmp_deuxieme = TroiziemeIndex!deuxieme
'lancement de la deuxieme boucle de recherche
'afin de creer une deuxieme arborescence
            Set deuxiemeIndex = mDbBiblio.OpenRecordset _
                    ("Select * From deuxieme Where num_id= " & Tmp_deuxieme)
            Set mNode = tvwDB.Nodes.Add(ID_Artiste, tvwChild, , , "Boite")
            mNode.Text = deuxiemeIndex!fa_nom ' Texte.
            mNode.Tag = mNode.Text '"deuxiemeS"
            prgLoad.Value = TroiziemeIndex.PercentPosition
'=============================================================
'ici je mémorise un index suplémentaire
'afin de créer une sous arborescence
                If TroiziemeIndex!ral = 0 Then
                    Tmp_Dif = 0
                    intIndex = mNode.Index
                    GoTo suite
                End If
                If IsNull(TroiziemeIndex!ral) Then
                    Tmp_Dif = 0
                    intIndex = mNode.Index
                    GoTo suite
                End If
                If TroiziemeIndex!ral = "VRS500" Then
                    Tmp_Dif = 1
                    intIndex = mNode.Index
                    ID_Ral = intIndex
                        GoTo suiteVRS500
                End If
                If TroiziemeIndex!ral = "9999" Then
                    Tmp_Dif = 1
                    intIndex = mNode.Index
                    ID_Ral = intIndex
                    Tmp_Ral = TroiziemeIndex!ral
                        GoTo suiteVRS500
                End If
                
intIndex = mNode.Index
ID_Ral = intIndex
suite:
'=============================================================
'vola je réalise le remplissage de mon arborescence
'avec tous les éléments don j'ai besoin
        Do Until TroiziemeIndex.EOF
Tmp_Ral = TroiziemeIndex!ral
                If Tmp_deuxieme <> TroiziemeIndex!deuxieme Then
                    If TroiziemeIndex!deuxieme < Tmp_deuxieme Then GoTo Fin
                        Tmp_deuxieme = TroiziemeIndex!deuxieme
                    GoTo Retour
                End If
'================CHERCHE un index===========================
    If TroiziemeIndex!ral > 0 Then
suiteVRS500:                                    'ne pas tenir compte de ces N° elles sont perso mais les remplacer par les votres ??
        If Not IsNull(TroiziemeIndex!ral) Then
            If Tmp_Dif = 1 Then
        
intIndex = ID_Ral
ID_Ral = intIndex
            Set mNode = tvwDB.Nodes.Add(ID_Ral, tvwChild, , , "Pen06")          'pen06(dans VB est un icone pour l'arborescence)
            If TroiziemeIndex!ral = 9999 Then
                mNode.Text = "Couleur :Brut"
            Else
            mNode.Text = "Couleur : " & TroiziemeIndex!ral ' Texte..
            End If
            mNode.Tag = "COULEUR"
            
intIndex = mNode.Index
Index = intIndex
            Set mNode = tvwDB.Nodes.Add(Index, tvwChild, , , "Note3")
            mNode.Text = TroiziemeIndex!designation  ' Texte.
            mNode.Tag = "DETAIL"
            GoTo fin2
        Else
            
            Set mNode = tvwDB.Nodes.Add(Index, tvwChild, , , "Note3")
            mNode.Text = TroiziemeIndex!designation  ' Texte.
            mNode.Tag = "DETAIL"
            GoTo fin2
    End If
        End If
'=============================================================
      Else
            Set mNode = tvwDB.Nodes.Add(intIndex, tvwChild, , , "Note3")
            mNode.Text = TroiziemeIndex!designation ' Texte.
            mNode.Tag = "DETAIL"
        End If
'=============================================================
fin2:
            mNode.Image = "Note3"                       ' Image du contrôle ImageList.
            TroiziemeIndex.MoveNext                     ' Se déplace vers l'enregistrement suivant dans TroiziemeIndex.
If TroiziemeIndex.EOF = True Then GoTo Fin
    New_Ral = TroiziemeIndex!ral
        If IsNull(New_Ral) Then New_Ral = 0
        If IsNull(Tmp_Ral) Then Tmp_Ral = 0
        
            If New_Ral <> Tmp_Ral Then
                    Tmp_Dif = 1
        Else
                    Tmp_Dif = 0
            End If
        Loop
Fin:
        RsArtiste.MoveNext          ' Se déplace vers l'enregistrement suivant dans Publishers.
    Loop
    prgLoad.Visible = False             ' Masque le contrôle Progressbar
    sbrDB.Style = sbrNormal             ' Affecte le style normal pour le contrôle Statusbar.
    tvwDB.Nodes(1).Sorted = True        ' Trie les noeuds de Publishers.
    tvwDB.Nodes(1).Expanded = True      ' Développe le noeud du haut.
    deuxieme.Close
    RsArtiste.Close
    TroiziemeIndex.Close
End Sub

Private Sub Form_Load()
    ' Configure le contrôle ProgressBar.
    prgLoad.Max = 100
    ' Ouvre Biblio.MDB et affecte la variable objet à la base de données.
    Chemin = App.Path + "\Artistes.mdb"
    Set mDbBiblio = DBEngine.OpenDatabase(Chemin)
        ' Configure le contrôle TreeView.
    tvwDB.Sorted = True
    Set mNode = tvwDB.Nodes.Add()
    mNode.Text = "STOCK :"
    mNode.Tag = mDbBiblio.Name
    mNode.Image = "closed"
    tvwDB.LabelEdit = False
    Affiche_Treevieuw
End Sub

Private Sub tvwDB_Collapse(ByVal Node As Node)
    If Node.Tag = "STOCK" Or Node.Index = 1 Or Node.Tag = "FOURNISSEUR" Then Node.Image = "closed"
End Sub

Private Sub tvwDB_Expand(ByVal Node As Node)
    If Node.Tag = "STOCK" Or Node.Index = 1 Or Node.Tag = "FOURNISSEUR" Then
        Node.Image = "open"
        Node.Sorted = True
    End If
   
End Sub

Conclusion :


Ce code ne fonctionnera pas temp que la base ne sera pas créée.(elles ne se seront pas dans le zip "maillez moi pour plus de détailles")
Je depose ce code a la demande d'un internaute bien precis ,(qui ce reconnaitra),et en meme temp pour en faire profiter les autres .
A vous de l'aménager à votre guise .

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.