logo UsualSoft   Skip Navigation Links
Accueil
Références
Tutoriels
Formations
Liens téléchargements

Contact : cgruchet@usualsoft.fr - Tél: 02 38 34 99 88 / 06 22 82 90 55
Microsoft Certified Professional
Cours : Visual-Basic

Bases de données 

TD : Le DataControl DAO

Claude Gruchet
Initiation TD3-P3 et fin
Page précédente du TD

Début du TD3

 

TD : Utilisation du contrôle DAO (3, fin)

Voyons la fin de notre projet PTestDao ... (Télécharger le début du projet)

Le but de cette troisième et dernière partie du TD sur le contrôle Data DAO sera de demander à l'utilisateur s'il veut valider les modifications ou non (s'il y en a) lors de la fermeture du formulaire. 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.

Nous allons donc créer une fonction qui testera chaque contrôle lié pour regarder si son contenu a été modifié ou non (propriété DataChanged) par rapport au contenu du champ lié (DataField). Pour faire une boucle générique (indépendante du contexte et, donc, réutilisable pour un autre formulaire).

Nous obtiendrons le code source suivant qu'il convient de saisir dans le module du formulaire (vous pourrez, plus tard, en faire une fonction publique (dans un module de base .Bas) à laquelle vous passerez le formulaire et le Nom du DataControl en paramètres) :

'-------------------------------------
Private Function IsModif() As Boolean
'-------------------------------------
Dim lctl As Control
   IsModif = False
   For Each lctl In Me.Controls
      If TypeName(lctl) = "TextBox" Then
         If lctl.DataField <> "" Then
            If lctl.DataChanged Then
               IsModif = True
               Exit For
            End If
         End If
      End If
   Next lctl
End Function

Vous remarquerez l'utilisation de la collection système Controls. C'est elle qui nous permet d'écrire un code générique facilement paramétrable et transposable. En cas de besoin vous pouvez consulter notre page de cours sur les collections système.

Nous testons le type du contrôle à l'aide de la fonction TypeName pour limiter nos tests aux contrôles de type TextBox (inutile de tester les Labels ou CommandButtons) qui sont nos contrôles liés. Ensuite nous testons la valeur de la propriété DataField, en effet, pour un contrôle lié cette propriété contient le nom du champ et ne peut donc être vide ! Ce n'est qu'après ces deux "filtres" que nous tentons de savoir si le contenu du contrôle a été modifié ou non.

La fonction IsModif nous renverra Vrai (True) si les données du formulaire ont été modifiées par l'utilisateur. Nous allons donc l'appeler lors de la demande de fermeture pour savoir quelle conduite adopter (fermer ou poser la question de la sauvegarde). Pour cela, nous allons coder la procédure événementielle cmdClose_Click() comme suit :

'---------------------------------
Private Sub cmdClose_Click()
'---------------------------------
' si les données n'ont pas été modifiées, on ferme le formulaire
   If Not IsModif() Then
      Unload Me
   Else
   ' sinon, on demande à l'utilisateur ce qu'il veut faire
      If MsgBox("Voulez vous enregistrer les modifications ?", _
               vbQuestion + vbYesNo, _
               "Fermer le formulaire") = vbYes Then
         Unload Me ' Si l'utilisateur a répondu 'oui' il faut sauver,
                   ' le déchargement du formulaire va enregistrer les données
      Else
      ' Si l'utilisateur n'a pas répondu 'oui' il ne faut pas sauver
         Me.datCli.UpdateControls ' dans ce cas, on annule les modifications
         Unload Me                ' avant de fermer le formulaire
      End If
   End If
End Sub

Pour terminer, il faudrait supprimer la croix de fermeture du formulaire en haut à droite de la fenêtre. Bien sûr, si l'utilisateur se sert de cette croix pour fermer son formulaire, l'événement click du bouton cmdClose ne sera pas déclenché. Pour finir, saisissez les valeurs de propriétés suivantes pour votre objet formulaire.

Propriété Valeur
BorderStyle Fixed Dialog : Cela empêche le redimensionnement du formulaire par l'utilisateur (inutile) et fait disparaître les boutons "Réduire" (propriété MinButton) et "Agrandir" (propriété MaxButton).
ControlBox False : fera disparaître l'icône de dialogue système de la fenêtre (à gauche de la barre de titre) et la croix de fermeture du formulaire (à droite).

Vous obtenez le formulaire suivant (notez l'apparence de la barre de titre) : 


Nous verrons, dans un autre TD, comment faire disparaître le contrôle Data DAO (en le rendant invisible) en réalisant la sélection de la fiche grâce à un formulaire de liste. Nous avons déjà étudié le code source nécessaire à la gestion de cette liste dans la fiche de cours dédiée à la bibliothèque de code DAO . Il suffira donc de réunir les deux techniques pour solutionner notre problème.

 

Page précédente du TD

Début du TD3