Connexion à une source de données avec ADODB

lundi 22 juin 2009 par Flaime

Bonjour à tous

Bienvenue sur ce site de partage. Pour mon premier tutoriel, je parlerai des différents types de connexion à une base de données à l’aide de visual basic. On note deux types de connexion dont :

1. Le premier qui est la connexion que j’appelle standard. C’est la connexion à l’aide de l’objet Adodc qui nécessite pas de code et qui pour ma part (je répète pour ma part) est déconseillé. Car cette manière n’est pas souple.

2. Le deuxième type de connexion est la connexion par CODE à l’aide de l’objet ADODB. Il a plusieurs variantes dont j’évoquerais 2.

Déclarer d’ abord une variable de type connexion :

Public maConnexion  As ADODB.Connection

il faut créer une instance de notre connexion de la manière suivante :

Set maConnexion = New ADODB.Connection

ouvrir la connexion.

NB : ne pas oublier la chaine de connexion à la base de données.

Si vous faites une connexion sans le biais d’un middleware(odbc) :

Chaine_de_connexion = nom_fournisseur+nom_bd+...etc.

maConnexion.open   Chaine_de_connexion

Si vous le faite avec odbc la chaine de connexion sera :

Chaine_de_connexion= nom_dsn_configure

maConnexion.open   Chaine_de_connexion

variante 1 : Sans créer une instance recordset(ensemble d’enregistrement)

Nous avons créer une connexion à la base de données. Pour accéder aux enregistrements via notre connexion, il nous faut déclarer un objet recordset comme suit :

Dim Marecordset As ADODB.Recordset

Ensuite pour ouvrir notre recordset on procède comme suit :

set   Marecordset=  maConnexion.execute( requete_sql)

Pour se déplacer dans notre recordset on dispose des mêmes méthode qu’avec un adodc. Ce sont movenext,moveprevious,movelast etc...

exemple : Marecordset.movenext pour aller à l’enregistrement suivant

Pour lire l’ensemble des enregistrements, on le fait dans une boucle. A vous de choisir la boucle qui vous anime le plus. Exemple de lecture :

       while not  Marecordset.EOF
                variable= Marecordset!Champ1
                 Marecordset.movenext
        wend

Ben !!!! explication oblige non ? Ok. La boucle while...wend me permet d’aller jusqu’au dernier enregistrement. Tant que je suis pas au dernier enregistrement, je récupère les champs de ma recordset qui m’intéresse à l’aide de ceci :

Marecordset!Champ1

Ici aussi il y a plusieurs variantes pour accéder aux champs :

- On peut indexer les champs en faisant Marecordset.Fields(0) pour le premier champ et ainsi de suite pour les autres. Une fois de plus cette manière est déconseillée car si la structure de votre table change, il va falloir réadapter l’indexage.

- Le movenext comme vu plus haut me permet (aussi) d’aller à l’enregistrement suivant.

Pour finir, il faut fermer les objets ouverts c’est a dire la connexion et l’ensemble des recordset ouvert.

Pratiquement, il est logique de fermer les recordset à l’avance.

exemple :

Marecordset.close et de libérer ensuite les ressources utilisées par ce recordset en faisant set  Marecordset=Nothing

Pour fermer notre connexion, faire simplement Maconnexion.close et le tout es gagné.

variante 2 : En Créant une instance recordset

Ici, après la déclaration de l’objet recordset, créer une instance du recordset. Ouf orienté objet mais on s’en sortira. On attache les ceintures y a de la tempête en vue.

Dim Marecordset As ADODB.Recordset

set   Marecordset=new  ADODB.Recordset

Nous allons utiliser notre connexion créée plus haut.

Alors pour ouvrir notre recordset, on procédera comme suit :

Marecordset.open source, connexion_active,[type_curseur],[type_verrou]

Source : correspond à la requête sql à exécuter.

connexion_active : correspond à la connexion active (ouverte) ; dans notre exemple Maconnexion.

[type_curseur] : champ optionnel : indique la manière dont vous voulez vous déplacer dans l’ensemble d’enregistrement, (RecordSet). La valeur par défaut est la constante ADO adOpeForwardOnly. C’est le curseur le plus utilisé. Il indique que seul le déplacement vers l’avant est permis. Le type de curseur contrôle aussi la manière dont les changements apportés à une table par d’autre utilisateurs affecte ce que vous voyez.

Il peut prendre les paramètres ci dessous :

adLockReadOnly

Les enregistrements sont en lecture seul. Ils ne peuvent pas être modifiés, et aucun nouvel enregistrement peut être ajouté. C’est le type de verrou par défaut.

adLockPessimistic

Les enregistrements sont verrouillés dès l’édition pour éviter toute interférence entre eux quand de nouvelles commandes sont entrées et que la commande de mise à jour Update a été appliquée.

adLockOptimistic

Les enregistrements ne sont verrouillés qu’au moment où la méthode Update est appelée.

[type_verrou] : champ optionnel : autorise ou non l’écriture dans la table, et si oui, comment. Du fait que plusieurs clients peuvent accéder simultanément à une table, vous devez faire attention à la façon dont les modifications seront effectuées. Il existe différent type de verrou, entre autres :

l’utilisation du recordset est identique à celui vu plus haut.

Exemple complet 1 :

private sub ProcedureExemple1()
        'declaration des variables
        Private maConnexion  As ADODB.Connection
        dim MaRecordset as Adodb.recordset
            dim var1 as string
        Set maConnexion = New ADODB.Connection
           maConnexion.open "DsnTuto"
           set MaRecordset= maConnexion.execute("select num_tuto,lib_tuto from Table_tuto")
           if not  MaRecordset.eof then' si des données ont été ramenées
                while  not  MaRecordset.eof
                        combo_tuto.additem  MaRecordset! lib_tuto
                         MaRecordset.movenext
                          wend
          end if
end sub

Exemple complet 2 :

private sub ProcedureExemple1()
        'declaration des variables
        Private maConnexion  As ADODB.Connection
        dim MaRecordset as Adodb.recordset
            dim var1 as string
        Set maConnexion = New ADODB.Connection
           maConnexion.open "DsnTuto"
          set  MaRecordset= new ADODB.recordset'instanciation du recordset
         MaRecordset.open "select num_tuto,lib_tuto from Table_tuto", Maconnexion
           
           if not  MaRecordset.eof then' si des données ont été ramenées
                while  not  MaRecordset.eof 'lecture de l'ensemble des enregistrements
                        combo_tuto.additem  MaRecordset! lib_tuto
                         MaRecordset.movenext
                          wend
          end if
end sub

Eh voilà. Lourd comme code mais optimisation oblige.

Avantage : Avec ces méthodes vous pouvez debugger vous même votre source de données et savoir dans quelle ligne se trouve l’erreur.

Astuce : Pour debugger à merveille vos codes en Visual basic, marquer un point d’arrêt en cliquant sur le plancher gauche. Un point rouge apparaît et la ligne de code est sélectionnée en rouge. Exécuter votre programme. L’exécution s’arrêtera sur le point d’arrêt. Pour aller pas à pas , ligne par ligne de code faites F8.

NB : pour accéder aux objet de ADODB, il faut cocher les références DAO 3.6 object library et Micosoft activex data 2.6 library.

Pratique non ???


Documents joints

20 juin 2009
Document : PDF
41.6 ko

Accueil du site | Contact | Plan du site | | Statistiques | visites : 851

© Copyright FacileDev, 2010