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
wendBen !!!! 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 subExemple 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 subEh 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
© Copyright FacileDev, 2010

