Manipuler une base de données Access
à partir de Visual Basic.

Durée : 2 heures.
Les pré-requis sont :
1
Préparation du projet Visual Basic.

Pour ajouter une bibliothèque : Menu Projet, commande Référence, cocher la bibliothèque désirée.

2
Les objets que l'on va utiliser :
Database et Recordset.

Les objets suivants sont à déclarer dans votre programme :

3
Premier exemple : affichage du premier enregistrement
d'une table.

Essayez le programme suivant. Attention ! Vous devez accéder à une base de données disponible dans votre répertoire de travail (au lieu de c:\disques.mdb), et à un table existant dans cette base (au lieu de artiste) :

Sub main()
  Dim db As Database
  Dim rs As Recordset
  Set db = OpenDatabase("c:\disques.mdb")
  Set rs = db.OpenRecordset("Artiste")
  Debug.Print rs.Fields("NomA").Value
  rs.Close
  db.Close
End Sub

Explication sur... Les objets Database et RecordSet.

  • On a un objet de type DataBase qui permet de faire le lien avec une base de données Access.

  • On a ensuite un objet de type RecordSet pour chaque table ou chaque requête à laquelle on souhaite accéder. Ici, on a un seul RecordSet (rs) pour accéder à une seule table (Artiste).

  • Les objets de type RecordSet contiennent toutes les propriétés et méthodes nécessaires pour :
    • accéder aux différents enregistrements de la table ou de la requête (rs.MoveNext, rs.MoveFirst, rs.MoveLast, etc.)
    • ajouter un enregistrement à une table (rs.AddNew)
    • supprimer un enregistrement d'une table (rs.Delete)

Remarque...

  • rs.Fields("NomA").Value peut s'abréger en rs("NomA"), car Fields et Value sont des propriétés par défaut.

4
Deuxième exemple : affichage de tous les enregistrements
d'une table.

Essayez le programme suivant.

Sub main()
  Dim db As Database
  Dim rs As Recordset
  Set db = OpenDatabase("c:\disques.mdb")
  Set rs = db.OpenRecordset("Artiste")
  Do Until rs.eof
    Debug.Print rs.Fields("nomA").Value
    rs.movenext
  Loop
  rs.Close
  db.Close
End Sub

Explication sur... Le parcours d'un RecordSet.

  • La méthode rs.MoveNext permet, dans un RecordSet, de passer à l'enregistrement suivant. Lorsqu'on a fini de manipuler le premier enregistrement, on utilise rs.MoveNext pour passer au suivant.

  • La propriété rs.eof nous indique si on a passé le dernier enregistrement, ce qui signifie qu'on les a tous parcouru et que le traitement est terminé. C'est pourquoi on s'en sert comme condition d'arrêt de notre boucle While.

5
Troisième exemple : ajout d'un nouvel enregistrement
dans une table.

Essayez le programme suivant :

Sub main()
  Dim db As Database
  Dim rs As Recordset
  Set db = OpenDatabase("c:\disques.mdb")
  Set rs = db.OpenRecordset("Artiste")
  rs.AddNew
  rs.Fields("NomA").Value = "
Nom de l'artiste"
  rs.Fields("Commentaire").Value = "Nouvel artiste, très en vogue"
  rs.update
  rs.Close
  db.Close
End Sub

Explication sur... L'ajout et l'édition.

  • La méthode rs.AddNew permet d'ajouter un nouvel enregistrement à une table, cet enregistrement devient l'enregistrement courant.

  • La méthode rs.UpDate permet de valider définitivement, sur le disque, les modifications apportées à un recordset. Si vous oubliez de faire UpDate après avoir créé ou modifié un enregistrement, ces modifications ne seront pas prises en compte.

  • Si vous souhaitez non pas ajouter un nouvel enregistrement, mais modifier l'enregistrement courant, utilisez la méthode rs.Edit. N'oubliez pas rs.UpDate pour valider les modifications.

6
Quatrième exemple : Ouverture d'une requête
au lieu d'une table.

L'exemple suivant nous permet d'afficher tous les artistes dont le nom commence par une lettre saisie par l'utilisateur. Essayez-le.

Sub main()
   Dim db As Database
   Dim rs As Recordset
   Dim lettre as string, sql as String
   lettre = InputBox("Saisissez
la 1ère lettre : ")
   Set db = OpenDatabase("c:\disques.mdb")
   sql =
"select * from Artiste where NomA like '" & lettre & "*';"
   Set rs = db.OpenRecordset(sql)
   Do Until rs.eof
     Debug.Print rs.Fields("NomA").Value
     rs.movenext
   Loop
   rs.Close
   db.Close
End Sub

Explication sur... Ouvrir une requête.

  • Si l'utilisateur saisi la lettre "A", la requête que l'on exécute est donc :

          Select * from Artiste where NomA like 'A*';
    .

  • Le OpenRecordset est la seule chose qui change. Ensuite, le parcours des enregistrements et leur affichage est strictement identique. Par contre, on n'a plus le droit d'éditer ou d'ajouter des enregistrements (sauf cas particuliers).

7
A vous de jouer...

Servez-vous de ce que vous avez appris dans les exemples précédents pour développer un programme plus important. Créez pour cela un nouveau projet. Ce programme devra accéder à une base de données et en afficher le contenu :

Exemple sous Visual Basic.
Exemple en génération HTML.

Télécharger la base des disques (format Access 97, 118 ko) qui a servi de base à ces exemples.

En savoir plus sur... Le lien avec Access.

Tout ce qu'on a vu ici est également utilisable en Visual Basic sous Access. Cela permet de faire certains traitements complexes sur la base en cours, notamment d'accéder à d'autres tables que celles concernées par le formulaire en cours.

En travaillant sous Access, l'ouverture de la base s'écrira :

Set db = CurrentDB


Sébastien PASTORE.