TD : Utilisation du contrôle DAO (2)
Voyons la suite de notre projet PTestDao ... (
Télécharger la première partie du projet
)
Tout d'abord, nous allons permettre la création
d'enregistrements, cela grâce à la propriété EofAction du contrôle Data
qu'il faut positionner à "AddNew" à l'aide de la liste
déroulante.
Vous pourrez, dès lors, a jouter des fiches en
allant au "dernier enregistrement" (grâce au bouton du
contrôle Data) puis, en cliquant sur le bouton "Enregistrement
suivant". Vous obtiendrez alors une fiche vide dans laquelle il vous
suffira de saisir un nom, une ville et un n° de téléphone pour créer la
fiche. Tout comme pour une modification, la fiche sera crée lorsque vous
changerez d'enregistrement ou fermerez le formulaire.
Commençons par ajouter les champs de la table
Clients qui ne sont pas encore dans notre formulaire. Utilisez le procédé que
nous avons vu à la fin de la première
partie de ce TD. Vous devez obtenir le formulaire suivant :
Utilisez les valeurs de propriétés
suivantes :
| |
name |
DataSource |
DataField |
Text |
| Ligne 1 d'adresse |
txtAdr1 |
datCli |
Adr1 |
vide |
| Ligne 2 d'adresse |
txtAdr2 |
datCli |
Adr2 |
vide |
| Code postal |
txtCp |
datCli |
Cp |
vide |
Nous allons ajouter 2 boutons à notre
formulaire, un pour annuler les modifications saisies (en cas de besoin, puisque
fermer le formulaire revient à sauver !), et un autre pour valider les
modifications saisies. Nous ferons, ensuite, le nécessaire pour que, lors de la
fermeture du formulaire, les modifications ne soient pas automatiquement
sauvegardées.
Ajoutez trois boutons de commande afin que votre
formulaire ait l'aspect suivant :
Vous utiliserez les propriétés suivantes pour
vos boutons de commande :
| |
Name |
Caption |
ToolTipText |
| Bouton Annuler |
cmdCancel |
&Annuler |
Annuler les modifications |
| Bouton Valider |
cmdSave |
&Valider |
Enregistrer les modifications |
| Bouton Fermer |
cmdClose |
&Fermer |
Fermer le formulaire |
Notez l'utilisation de l'esperluette (&)
pour créer des raccourcis clavier utilisables avec la touche Alt
conjointement avec la touche de la lettre qui suit
l'esperluette dans le libellé (ce n'est pas forcément la première lettre).
Par exemple, il faudra utiliser <Alt A> pour activer l'événement Click
du bouton cmdCancel (Annuler).
Appelez le module de code source (par exemple en
double cliquant sur l'un des boutons ce qui génèrera le prototype de la
fonction gérant l'évènement Click de ce bouton).
Saisissez le code suivant pour les trois boutons
qui nous intéressent :
|
Option Explicit
Option Compare Text
'---------------------------------
Private Sub cmdCancel_Click()
'---------------------------------
Me.datCli.UpdateControls
End Sub
'---------------------------------
Private Sub cmdClose_Click()
'---------------------------------
Me.datCli.UpdateControls
Unload Me
End Sub
'---------------------------------
Private Sub cmdSave_Click()
'---------------------------------
Me.datCli.UpdateRecord
End Sub
|
Notez
l'utilisation des méthodes UpdateControls et UpdateRecord du Data
contrôle DAO. L'action de ces méthodes est la suivante :
|
UpdateControls |
Transfère
le contenu des champs de l'enregistrement courant vers les contrôles
liés en fonction de la valeur de la propriété DataField du contrôle
lié. |
|
UpdateRecord |
Transfère
le contenu des contrôles liés vers les champs de l'enregistrement
courant en fonction de la valeur de la propriété DataField du contrôle
lié. |
Vous remarquerez que nous appelons la méthode UpdateControls
avant la fermeture du formulaire. Ceci car nous désirons que l'enregistrement
dans la base de données soit une action volontaire de l'utilisateur (click sur
le bouton valider). Le code source que nous avons écrit annule les éventuelles
modifications avant la fermeture du formulaire ce qui empêche la validation
involontaire de données.
Il serait tout de même plus convivial de détecter
d'éventuelles modifications puis, de demander à l'utilisateur s'il veut les
valider ou non. Ceci pourra être réalisé à l'aide de la propriété
DataChanged des contrôles liés et de la fonction MsgBox de Visual basic.