CODES SOURCES

- MODIFICATION D'UNE BASE AVEC D.A.O.-

 

 

Dans cet exercice, on utilise une interface VB pour modifier une table d'une base de données Access. On utilise DAO (Data Access Object") pour ce connecter à la base de données.

 

 Exercice : Au démarrage de l'application, la liste des candidats est chargée à l'aide de la table "candidat" de la base de données "BdVbGenerator". Un candidat peut être engagé, pour cela, il faut sélectionner le nom du candidat dans la liste des candidats, puis cliquer sur "ajouter" pour transférer le nom dans la liste des engagés. Une fois la liste des engagés complètes, il ne reste plus qu'à cliquer sur "Mettre à jour" pour actualiser la table des engagés dans la base de données. Tout les noms de la liste des engagés se retrouvent inscrits dans la base de données.

Remarques : les clés primaires des deux tables sont de types "numéros automatiques", leurs gestions n'est par conséquent pas à la charge du programmeur, par contre, si vous utilisez un type numérique classique, vous devez en tenir compte et intégrer la gestion de ces champs dans le programme.

Pour utiliser le modèle D.A.O, il faut également ajouter une référence au projet, c'est à dire ajouter la bibliothèque d'objets correspondante. Pour cela cliquez sur "Références" dans le menu contextuel "Projet". Cochez la bibliothèque d'objets "Microsoft DAO 3.6 Object Library" puis cliquez sur "Ok" pour ajouter la bibliothèque.

La plupart du code concernant la modification d'une table via une connexion D.A.O est situé dans le code du bouton "Mise à jour".

Ce programme incorpore une gestion des erreurs, ce qui alourdit le programme en code.

 

L'interface :

Elle contient 2 listes "ListBox" et 4 boutons de commande "Command Button".

 

 

 

Code de la section "général" :

 

Option Explicit
Dim Mabase As Database            'Déclaration d'une base de données
Dim CandidatRst As Recordset    'Déclaration des jeux d'enregistrements
Dim EngageRst As Recordset
 

 

Code du bouton CmdAjouter :


Private Sub CmdAjouter_Click()
'Ajout du candidat dans la liste des engegés
engagelst.AddItem candidatlst.List(candidatlst.ListIndex)
'Retrait de l'engagé de la liste des candidats
candidatlst.RemoveItem (candidatlst.ListIndex)

'Sélection du dernier élément de chaque liste
If candidatlst.ListCount > 0 Then       'Si il reste au moins un element
candidatlst.Selected(candidatlst.ListCount - 1) = True   'selectionner
End If
If engagelst.ListCount > 0 Then          'Si il reste au moins un element
engagelst.Selected(engagelst.ListCount - 1) = True        'selectionner
End If

'Test de sécurisation permettant de verouiller le bouton _
"ajouter" si il n'y a plus de candidat à ajouter et inversement

If candidatlst.ListCount = 0 Then        'Si il n'y a plus de candidats
CmdAjouter.Enabled = False             'Désactiver le bouton
Else
CmdAjouter.Enabled = True              'Activer le bouton
End If

'Test de sécurisation permettant de verouiller le bouton _
"enlever" si il n'y a plus de candidat à enlever et inversement

If engagelst.ListCount = 0 Then
CmdEnlever.Enabled = False
Else
CmdEnlever.Enabled = True
End If
End Sub
 

 

Code du bouton CmdEnlever :


Private Sub CmdEnlever_Click()
'Ajout du candidat dans la liste des engagés
candidatlst.AddItem engagelst.List(engagelst.ListIndex)
'Retrait de l'engagé de la liste des candidats
engagelst.RemoveItem (engagelst.ListIndex)

'Sélection du dernier élément de chaque liste
If candidatlst.ListCount > 0 Then     'Si il reste au moins un element
candidatlst.Selected(candidatlst.ListCount - 1) = True   'selectionner
End If
If engagelst.ListCount > 0 Then       'Si il reste au moins un element
engagelst.Selected(engagelst.ListCount - 1) = True        'selectionner
End If

'Test de sécurisation permettant de verouiller le bouton _
"ajouter" si il n'y a plus de candidat à ajouter et inversement

If candidatlst.ListCount = 0 Then      'Si il n'y a plus de candidats
CmdAjouter.Enabled = False           'Désactiver le bouton
Else
CmdAjouter.Enabled = True            'Activer le bouton
End If

'Test de sécurisation permettant de verouiller le bouton _
"enlever" si il n'y a plus de candidat à enlever et inversement

If engagelst.ListCount = 0 Then
CmdEnlever.Enabled = False
Else
CmdEnlever.Enabled = True
End If
End Sub
 

 

Code du bouton CmdMAJ (Mise à jour) :


Private Sub CmdMAJ_Click()
Dim x As Integer
'On vide la table, on efface les anciens enregistrements
Mabase.Execute "DELETE ENGAGES.* FROM ENGAGES"   'Execution d'une _
requête SQL de suppression


'On remplit les champs du jeu d'enregistrement Engages
For x = 0 To engagelst.ListCount - 1
EngageRst.AddNew   'Ajout d'un enregistrement
EngageRst("NOM") = engagelst.List(x)   'Inscription dans la table
EngageRst.Update      'Enregistrement des modifications
Next
'Remarque : pour modifier un champs d'un enregistrement, _
on utilise la méthode "Edit" plutôt que "Addnew". Addnew sert _
à ajouter un enregistrement, pas à le modifier.
'Exemple:
'EngageRst.Edit 'Modification d'un enregistrement
' EngageRst("NOM") = Laurent 'Modification du champs "nom"
' EngageRst.Update 'Enregistrement des modifications

End Sub

 

Code du bouton CmdQuitter:


Private Sub CmdQuitter_Click()
End       'Fermer l'application
End Sub
 

 

Code du chargement de la feuille


Private Sub Form_Load()
'Ouverture de la base de données
Set Mabase = OpenDatabase("C:\BdVbGenerator.mdb")
'Ouverture des jeux d'enregistrements
Set CandidatRst = Mabase.OpenRecordset("MEMBRES")
Set EngageRst = Mabase.OpenRecordset("ENGAGES")

'Chargement de la liste des candidats par _
un test de type "For" : "Pour x allant de ... à ..."
'On parcourt le jeu d'enregistrement et on ajoute chaque enregistrement

Dim x As Integer    'Déclaration dun compteur
For x = 1 To CandidatRst.RecordCount
candidatlst.AddItem CandidatRst("NOM")      'Ajouter l'enregistrement à la liste
CandidatRst.MoveNext                                   'Passer à l'enregistrement suivant
Next 'Fin du test

'Sélection du dernier élément de la liste
If candidatlst.ListCount > 0 Then 'Si il y a au moins un element
candidatlst.Selected(candidatlst.ListCount - 1) = True 'selectionner
End If
End Sub
 

 

Code du déchargement de la feuille
 

Private Sub Form_Unload(Cancel As Integer)
'Fermeture des jeux d'enregistrements
CandidatRst.Close
EngageRst.Close
'Fermeture de la base de données

Mabase.Close
End Sub

 

 

 

 

   

 

          ©Copyright Webmaster 2002