Les Snippets

Connexion

Ajout headers et/ou enregistrements dans une ListView via lecture d'une table/Bdd

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 25/11/2007 10:35:27 et initié par Exploreur [Liste]
Date de mise à jour : 07/12/2007 23:34:38
Vue : 2737
Catégorie(s) : Base de données
Langages dispo pour ce code :
- VB6, VBA
- Voir tous les langages pour ce code snippet



Langage : VB6 , VBA
Date ajout : 25/11/2007
Posté par Exploreur [Liste]
DateMAJ : 07/12/2007
Public Function FillListViewFromAdoCnx(ByRef  CnxAdo As ADODB.Connection, MyLv As ListView, ByVal sSql As String, Optional ByVal bHeader As Boolean = True,  Optional ByVal lFirstRow  As Long = 1, Optional  ByVal lLastRow As Long  = 0) As Boolean
'******************************************************************************
'*    Fonction remplissage de colonnes (headers / nom des  tables)  et des    *
'*          champs avec  "LIMIT"  définissable dans ListView à partir         *
'*                          d'une Connexion  ADO  active                      *
'*                                                                            *
'*    -----------------------                                                 *
'*  -Ajout Référence projet : Microsoft ActiveX Data Objects  2.5  Library    *
'*  -Ajout  composant        :  Microsoft Windows Common controls 6.0         *
'*    -----------------------                                                 *
'*                                                                            *
'*  ------------                                                              *
'*  Utilisation  :                                                            *
'*  ------------                                                              *
'* les 5  premiers  :                                                         *
'*      FillListViewFromAdoCnx CnxAdo,  ListView1, Sql, , 1,  5               *
'                                                                             *
'* les 5  seconds  :                                                          *
'*      FillListViewFromAdoCnx CnxAdo, ListView1, Sql, ,  6,  10              *
'                                                                             *
'* du 11è à la  fin  :                                                        *
'*      FillListViewFromAdoCnx CnxAdo, ListView1, Sql, ,  11,  0              *
'                                                                             *
'* tous sans  Header  :                                                       *
'*      ListView1.ColumnHeaders.Add , ,  "champs  1"                          *
'*      ListView1.ColumnHeaders.Add , ,  "champs  2"                          *
'*      FillListViewFromAdoCnx  CnxAdo, ListView1, Sql,  False                *
'                                                                             *
'******************************************************************************
    ' init
    FillListViewFromAdoCnx = False
    
    ' cnx  inexistante?
    If CnxAdo Is Nothing Then
        Exit Function
    ElseIf Not (CnxAdo.State = adStateOpen)  Then
        Exit Function
    End If
    
    '  sql  vide?
    sSql = Trim$(sSql)
    If LenB(sSql) = Then Exit Function
    
    '  logique  rows
    If lFirstRow < Then
        Exit Function
    ElseIf lLastRow < Then
        Exit Function
    ElseIf (lLastRow > 0And (lLastRow < lFirstRow)  Then
        Exit Function
    End If
    '  variables
    Dim i       As Long
    Dim j       As Long
    Dim RstAdo  As New ADODB.RecordSet
    Dim Itmx    As ListItem
    
    ' init Listview
    If bHeader Then MyLv.ListItems.Clear:  MyLv.ColumnHeaders.Clear
    MyLv.Visible = False
    
    On Error GoTo Lbl_Err
    ' Paramètres  RecordSet et lancement de la  requête
    RstAdo.CursorLocation = adUseClient
    RstAdo.Open sSql, CnxAdo, adOpenDynamic,  adLockPessimistic
    ' Si il n'y a pas  de  champs on ne fait rien
    If RstAdo.Fields.Count > Then
        '  header
        If bHeader Then
            ' on affiche  forcément toutes les colonnes puisque  c'est la requête qui prévoit le  retour
            For i = To RstAdo.Fields.Count - 1
                 MyLv.ColumnHeaders.Add , ,  RstAdo.Fields(i).Name
            Next i
        End If
        
        '  champs.  attention!! si pas de header, il faut évidemment que la listview ait  été  préparée avant!
        If RstAdo.RecordCount > Then
            ' 1er champ zéro  =  aucun champs
            If lFirstRow > Then
                ' dernier  champ  zéro = tous, trop grand => on réduit  au  dernier
                If (lLastRow = 0Or (lLastRow > RstAdo.RecordCount) Then  lLastRow = RstAdo.RecordCount
                ' ajoute
                RstAdo.Move lFirstRow - 1
                For i = lFirstRow - To lLastRow - 1
                    Set Itmx = MyLv.ListItems.Add(, ,  CStr(RstAdo.Fields(0).Value))
                    For j = To RstAdo.Fields.Count - 1
                        Itmx.SubItems(j) = IIf(LenB(RstAdo.Fields(j).Value) > 0, RstAdo.Fields(j).Value,  vbNullString)
                    Next j
                    ' passe à  l'enregistrement  suivant
                    If Not RstAdo.EOF Then RstAdo.MoveNext
                Next i
                ' pas d'erreur
                FillListViewFromAdoCnx = True
            Else
                ' pas de  champs  mais pas d'erreur pour autant
                FillListViewFromAdoCnx = True
            End If
        Else
            ' pas d'erreur
            FillListViewFromAdoCnx = True
        End If
    End If
' gestion d'erreur  s'il  y en a eu
Lbl_Err:
    If Not (Err.Number = 0Then
        FillListViewFromAdoCnx = False
        Err.Clear
    End If
    
    MyLv.Visible = True
    
    '  destruction  objets
    RstAdo.Cancel
    If Not (RstAdo.State = adStateClosed)  Then RstAdo.Close
    Set RstAdo = Nothing
    Set Itmx = Nothing
End Function

Remarque :
permet d'initialiser une listview d'après une requête et une cnx/bdd active

Snippets en rapport avec : Lignes, Header, Listview, Ado, Recordset



Codes sources en rapport avec : Lignes, Header, Listview, Ado, Recordset

{C / C++ / C++.NET} RÉARRANGER LES LIGNES D'UNE LISTVIEW À LA SOURIS (WIN32 API)
Ce code source montre comment réarranger les lignes d'une ListView à la souris. Il utilise la notifi...

{Visual Basic, VB6, VB.NET, VB 2005} COMPTABILITE PERSO
c'est un exemple simple de comptabilité personnelle avec une bd et codé en ADO il ya le choix au ni...

{Visual Basic, VB6, VB.NET, VB 2005} CONNECTION AVEC BASE DE DONNÉE ACCESS
dans cet exemple j'ai essayé de creer une conection avec une base de donne access en utilisant les A...

{Visual Basic, VB6, VB.NET, VB 2005} IMPLEMENTATION AUTOMATIQUE DE RECORDSET POUR TOUS LES PROVIDERS, PASSER LE RECORDSET EN PARAMÈTRE ET IL GÈRE TOUT SEUL AJOUTER/MODIFIER/SUPPRIMER, TRIER, FILTRER ET VISUALISER
C'est très embetant de devoir créer autant de formulaires pour les tables de références de votre app...

{Visual Basic, VB6, VB.NET, VB 2005} GESTION D'UNE BASE DE DONNÉES AVEC UN CONTRÔLE LISTVIEW SOUS ADO
Ce code source permet d'accéder à une base de données Access par le biais d' un contrôle listview o...

{Visual Basic, VB6, VB.NET, VB 2005} MONTER OU DESCENDRE TOUTES LES VALEURS D'UNE LISTVIEW
Ce code montre comment descendre ou monter une ligne dans un controle listview. La ligne s'interc...

{Visual Basic, VB6, VB.NET, VB 2005} FLAT HEADER IN LISTVIEW
Ce code est pas de moi j'ai juste fais l'exemple ...

{Visual Basic, VB6, VB.NET, VB 2005} UTILISER ADO.NET COMME EN ADO (RECORDSET)
Voila pour ceux qui comme moi ont beaucoup de mal avec les nouvelles méthodes de l'ADO.Net, j'ai réa...

{PHP} HEADER LOOKUP :: ANALYSE DU HEADER HTTP
Hello, Voici un petit script qui récupère le header, (Entête) d'un serveur web (HTTP). J'ai mis un...

{C# / C#.NET} MOTEUR CSV ET RECORDSET PERSO
Un petit moteur pour accéder à une base CSV et un système de RecordSet pour améliorer l'accès aux do...