[dao] alimenter un listbox avec une requête sql

Soyez le premier à donner votre avis sur cette source.

Vue 14 160 fois - Téléchargée 1 480 fois

Description

Suite à une demande sur le forum;

Ce code se connecte à une base de données ACCESS avec les objets DAO
pour effectuer une requête SQL de type SELECT
et afficher les enregistrements d'un champ dans un ListBox.

L'intérêt est de comprendre la manipulation d'objets DataBase et Recordset,
qui permettent de se passer du contrôle Data et/ou du contrôle DBList.

Source / Exemple :


'On a besoin d'un formulaire et d'un Listbox.

Option Explicit

Private Sub Form_Load()
'Si "Type non défini par l' utilisateur" : aller dans Projet/Références
'et ajouter la librairie des objets DAO.
    
    Dim maBase As Database
    Dim monRecordset As Recordset

'On a une base nommée 'TestBase' qui contient une table 'users'.
'Cette table contient 2 champs: 'nick' et 'host'.
    
    Set maBase = OpenDatabase("D:\code\VB\DAO\TestBase.mdb")
    Set monRecordset = maBase.OpenRecordset( _
        "SELECT nick FROM users ORDER BY nick", dbOpenSnapshot)

    With monRecordset
        .MoveLast    ' Remplit l'objet Recordset.
        .MoveFirst

            Do While Not .EOF   'puis parcours les enregistrements
                List1.AddItem !nick
                .MoveNext
            Loop

        .Close 'fermeture du recordset
    End With

    maBase.Close 'fermeture de la base de données

End Sub

Conclusion :


Note: la méthode Opendatabase prend en argument le chemin complet de la base mais ce n'est pas obligatoire.

Une base de données exemple est fournie dans le zip.

Conseil: placez des points d'arret dans le code, et pendant l' exécution, affichez la fenêtre variables locales
(menu Affichage) pour observer les propriétés des objets créés.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

klinux
Messages postés
4
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
16 juillet 2005
-
les types database et recordset n'existent pas,je ne sais pas pourquoi?!
Neo.balastik
Messages postés
797
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
4 -
klinux > tu dois référencer la bibliothèque DAO
Pour ce faire tu vas dans le menu Projet -> Références -> tu coches dans la liste 'Microsoft DAO 3.6 Object Library'

mythic_kruger > DAO est une technologie obsolète supplantée par ADO qui est bien plus puissant (mais pas aussi évident à manipuler). Certes DAO fonctionne toujours et son emploi est simple.
Je te conseille vivement de voir du côté de ADO et d'oublier DAO. Tout nouveau programme développé ne devrait plus utiliser DAO.
klinux
Messages postés
4
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
16 juillet 2005
-
merci,j'ai pas fait attentionca marche tres bien
mythic_kruger
Messages postés
242
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
10 novembre 2005
-
Neo.Balistik: STP montres-nous le même code avec les ADO pour comparer.
Neo.balastik
Messages postés
797
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
4 -
mythic_kruger >

Voilà un court extrait en ADO :

Dim oADO As ADODB.Connection
Dim oRS As ADODB.Recordset
Dim strPWD As String
Dim strSQL As String

Set oADO = New ADODB.Connection

'Dans le cas d'une DB avec un mot de passe
With oADO
.PROVIDER = "Microsoft.jet.oledb.4.0;Jet OLEDB:Database Password=" & strPWD
.Mode = adModeShareDenyNone
.ConnectionString = "D:\code\VB\DAO\TestBase.mdb"
.Open
End With

Set oRS = New ADODB.Recordset

strSQL = "SELECT nick FROM users ORDER BY nick"

With oRS
.CursorLocation = adUseClient
.Open strSQL, oADO, adOpenForwardOnly, adLockOptimistic
.Properties.Refresh
.MoveLast
.MoveFirst

Do While Not .EOF
List1.AddItem .Fields("Nick").value
.MoveNext
Loop

.Close

End With

oADO.Close

Set oRS = Nothing
Set oADO = Nothing

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.