Cours VB 2007/ Complément Chapitre 6 Les Bases de Données en VB Exemples
Cours VB 2007/ Contrôles dépendants
3 Cours VB – ISG 2007/2008 Préparation de linterface Dim aj As Integer Private Sub cmdajouter_Click() aj = 1 Call MAJAffichage(Me, aj) DataEnvironment1.rsTAutor.AddNew txtNumAutorisation.SetFocus End Sub Private Sub cmdmodifier_Click() If txtNumAutorisation <> "" Then aj = 0 Call MAJAffichage(Me, aj) txtNumAutorisation.SetFocus Else MsgBox "Rien à modifier" End If End Sub
4 Cours VB – ISG 2007/2008 Validation & Annulation Private Sub CmdValider_Click() DataEnvironment1.rsTAutor.Update Call MAJAffichage(Me, aj) If aj = 1 Then Call Actualiser() DataEnvironment1.rsTAutor.MoveLast End If dans le cas où le numéro du champ est un numéro automatique End Sub Private Sub cmdAnnuler_Click() If aj = 0 Then DataEnvironment1.rsTAutor.AddNew DataEnvironment1.rsTAutor.CancelUpdate Else DataEnvironment1.rsTAutor.CancelUpdate End If Call MAJAffichage(Me, aj) End Sub
5 Cours VB – ISG 2007/2008 Suppression Private Sub cmdsupprimer_Click() If DataEnvironment1.rsTAutor.RecordCount = 0 Then Exit Sub If MsgBox("Voulez vous supprimer", vbYesNo + vbQuestion, "GSC") = vbNo Then Exit Sub End If DataEnvironment1.rsTAutor.Delete If DataEnvironment1.rsTAutor.RecordCount > 0 Then If DataEnvironment1.rsTAutor.BOF Then DataEnvironment1.rsTAutor.MoveFirst Else DataEnvironment1.rsTAutor.MovePrevious End if Else DataEnvironment1.rsTAutor.AddNew DataEnvironment1.rsTAutor.CancelUpdate End If End Sub
6 Cours VB – ISG 2007/2008 Mise à jour affichage Sub MAJaffichage(frm As Form, aj As Integer) Dim Cont As Variant For Each Cont In frm.Controls If TypeOf Cont Is TextBox Then If Cont.Tag = "" Then Cont.Locked = Not Cont.Locked ElseIf Cont.Tag <> "" And aj = 1 Then Cont.Locked = Not Cont.Locked End If 'If TypeOf cont Is CommandButton Then ' cont.Enabled = Not cont.Enabled 'End If If TypeOf Cont Is CommandButton Then Cont.Visible = Not Cont.Visible End If Next Cont End Sub
Cours VB 2007/ Contrôles indépendants
8 Cours VB – ISG 2007/2008 Préparation de linterface Dim aj As Integer Dim sauv as Variant Private Sub cmdajouter_Click() aj = 1 sauv = DataEnvironment1.rsTAutor.bookmark Call PerparerInterface(Me) Call MAJAffichage(Me, aj) txtNumAutorisation.SetFocus End Sub Private Sub cmdmodifier_Click() If txtNumAutorisation <> "" Then aj = 0 Call MAJAffichage(Me, aj) sauv = DataEnvironment1.rsTAutor.bookmark txtNumAutorisation.SetFocus Else MsgBox "Rien à modifier" End If End Sub
9 Cours VB – ISG 2007/2008 Validation & Annulation Private Sub CmdValider_Click() If aj =1 then DataEnvironment1.rsTAutor.addnew endif Call AffecterValeur () DataEnvironment1.rsTAutor.Update Call MAJAffichage(Me, aj) dans le cas où le numéro du champ est un numéro automatique If aj = 1 Then Call actualiser() DataEnvironment1.rsTAutor.MoveLast sauv = DataEnvironment1.rsTAutor.bookmark Call afficherEnregistrement() End If End Sub Private Sub cmdAnnuler_Click() Call afficherEnregistrement() Call MAJAffichage(Me, aj) End Sub
10 Cours VB – ISG 2007/2008 Suppression Private Sub cmdsupprimer_Click() If DataEnvironment1.rsTAutor.RecordCount = 0 Then Exit Sub If MsgBox("Voulez vous supprimer", vbYesNo + vbQuestion, "GSC") = vbNo Then Exit Sub End If DataEnvironment1.rsTAutor.Delete If DataEnvironment1.rsTAutor.RecordCount > 0 Then If DataEnvironment1.rsTAutor.BOF Then DataEnvironment1.rsTAutor.MoveFirst Else DataEnvironment1.rsTAutor.MovePrevious End if Sauv = DataEnvironment1.rsTAutor.Bookmark Call afficherEnregisterment() Else Call PreparerInterface() End If End Sub
11 Cours VB – ISG 2007/2008 Préparation de linterface Sub PreparerInterface(frm as form) Dim Cont As Variant For Each Cont In frm.Controls If TypeOf Cont Is TextBox Then Cont.Text = "" End If Next Cont End Sub
12 Cours VB – ISG 2007/2008 Sub AfficherEnregistrement () With DataEnvironment1.rsTAutor.bookmark = sauv txtNumAutorisation =.Fields("NumAutorisation") txtNature =.Fields("Nature") txtQtéAutorisation =.Fields("QtéAutorisation") End with End Sub Sub AffecterValeur () With DataEnvironment1.rsTAutor.Fields("NumAutorisation") = txtNumAutorisation.Fields("Nature") = txtNature.Fields("QtéAutorisation") = txtQtéAutorisation end with End Sub
13 Cours VB – ISG 2007/2008 Actualisation de recodeset (Requery) Sub Actualiser() Dim C As Control Un contrôle générique pour parcourir la collection de contrôles de feuille Dim Pos As Variant Une variable de type variant pour sauvegarder la position courante dans le recordset Dim Conn As Connection ' Une référence pour sauvegarder la connexion courante de DataEnvironment With DataEnvironment1.rsTAutor ' Sauvegarder la position courante Pos =.Bookmark ' Sauvegarder la référence de connexion active Set Conn =.ActiveConnection ' Fermer le recordset courant.Close ' Ouverture du recordset.Open, Conn ' Recréer le jeu d'enregistrements en ré-exécutant la requête Comme elle est exécutée à nouveau, il peut y avoir des enregistrements en plus ou en moins.Requery ' Une boucle pour parcourir tous les contrôles de feuille courante
14 Cours VB – ISG 2007/2008 For Each C In Me.Controls ' Verifier si le contrôle courant est un contrôle dépendant (TextBox, DataCombo,...) If TypeOf C Is TextBox Or _ TypeOf C Is DataCombo Or _ TypeOf C Is DataList Or _ TypeOf C Is MSHFlexGrid Or _ TypeOf C Is DataGrid Then ' Rédefinir la propriété DataSource de contrôle dépendant Set C.DataSource = DataEnvironment1 End If ' Pour les contrôles DataCombo et DataList ont, en plus la propriété' RowSource If TypeOf C Is DataCombo Or _ TypeOf C Is DataList Then Set C.RowSource = DataEnvironment1 End If Next.Bookmark = Pos End With End Sub Actualisation de recodeset (Requery)
Cours VB 2007/ Exemple Gestion de la table commandes
16 Cours VB – ISG 2007/2008
17 Cours VB – ISG 2007/2008 Propriétés des contrôles dataCombo 1. Code Client RowSource= DataEnvironment1 RowMember= TableClients BoundColumn= Code client ListField=Société DataSource= DataEnvironment1 DataMember= TableCdes DataField= Code client 2. N° employé RowSource= DataEnvironment1 RowMember= TableEmploye BoundColumn= N° employé ListField=Société DataSource= DataEnvironment1 DataMember= TableCdes DataField= N° employé 3. Messager RowSource= DataEnvironment1 RowMember= TableMessagers BoundColumn= N° messager ListField=Société DataSource= DataEnvironment1 DataMember= TableCdes DataField= N° messager
18 Cours VB – ISG 2007/2008 Consultation ou Navigation Private Sub CmdDernier_Click() With DataEnvironment1.rsTableCdes If.RecordCount > 0 Then.MoveLast End If End With End Sub Private Sub CmdPrecedent_Click() With DataEnvironment1.rsTableCdes If.RecordCount > 0 Then.MovePrevious If.BOF = True Then.MoveLast End If End With End Sub
19 Cours VB – ISG 2007/2008 Private Sub CmdPremier_Click() With DataEnvironment1.rsTableCdes If.RecordCount > 0 Then.MoveFirst End If End With End Sub Private Sub CmdSuivant_Click() With DataEnvironment1.rsTableCdes If.RecordCount > 0 Then.MoveNext If.EOF = True Then.MoveFirst End If End With End Sub Consultation ou Navigation
20 Cours VB – ISG 2007/2008 Consultation ou Navigation Private Sub CmdRechercher_Click() Dim s As String Dim sauv As Variant s = InputBox("n° Commande") sauv = DataEnvironment1.rsTableCdes.Bookmark DataEnvironment1.rsTableCdes.Find "[n° Commande]_ = '" + s + "'",, adSearchForward, 1 If DataEnvironment1.rsTableCdes.EOF Then MsgBox "Enregistrement inexistant" DataEnvironment1.rsTableCdes.Bookmark = sauv End If End Sub
21 Cours VB – ISG 2007/2008 Opérations de mise à jour Private Sub CmdNouveau_Click() aj = 1 Call MAJaffichage(Me, aj) DataEnvironment1.rsTableCdes.AddNew txtN°commande.SetFocus End Sub Private Sub CmdEditer_Click() If txtN°commande <> "" Then aj = 0 Call MAJaffichage(Me, aj) txtN°commande.SetFocus Else MsgBox "Rien à modifier" End If End Sub
22 Cours VB – ISG 2007/2008 Opérations de mise à jour Private Sub CmdValider_Click() DataEnvironment1.rsTableCdes.Update Call MAJaffichage(Me, aj) Call Actualiser(Me) If aj = 1 Then DataEnvironment1.rsTableCdes.MoveLast End If 'le numéro du champ est un numéro automatique End Sub Private Sub CmdAnnuler_Click() With DataEnvironment1.rsTableCdes If aj = 0 Then.AddNew.CancelUpdate Else.CancelUpdate End If Call MAJaffichage(Me, aj) End With End Sub
23 Cours VB – ISG 2007/2008 Opérations de mise à jour Private Sub CmdSupprimer_Click() With DataEnvironment1.rsTableCdes If.RecordCount = 0 Then Exit Sub If MsgBox("Voulez vous supprimer", vbYesNo + vbQuestion, "Gestion Clients") = vbNo Then Exit Sub End If DataEnvironment1.rsTableDtCdes.Open DataEnvironment1.rsTableDtCdes.Filter = "[n° Commande] = '" + txtN°commande + "'" If DataEnvironment1.rsTableDtCdes.RecordCount > 0 Then Do While Not DataEnvironment1.rsTableDtCdes.EOF DataEnvironment1.rsTableDtCdes.Delete DataEnvironment1.rsTableDtCdes.MoveNext Loop End If DataEnvironment1.rsTableDtCdes.Close.Delete If.RecordCount > 0 Then If.BOF Then.MoveFirst Else.MovePrevious End If Else.AddNew.CancelUpdate End If End With End Sub
Cours VB 2007/ collection Errors
25 Cours VB – ISG 2007/2008 La collection Errors Cest une collection qui permet de récupérer les propriétés des erreurs qui peuvent apparaître dans une application Un objet Error contient des informations relatives aux erreurs daccès aux données au cours dune opération avec le fournisseur de données.
26 Cours VB – ISG 2007/2008 Exemple Private Sub Cmdvalider_Click() On Error GoTo etiq DataEnvironment1.rsCTProduits.Update Exit Sub etiq: If Err.Number = Then MsgBox "Mon message pour doublon" End Sub
27 Cours VB – ISG 2007/2008 Erreurs !! Réagissons avant !!! 1 – 2 – 1 2
28 Cours VB – ISG 2007/2008 Erreurs !! Réagissons avant !!! – 4 –
29 Cours VB – ISG 2007/2008 Erreurs !! Réagissons avant !!! – 6 –
Cours VB 2007/ Annexe DataGrid
31 Cours VB – ISG 2007/2008 Utilisation du DataGrid (1) Supposons qu'on a un bouton de commande Valider (CMDValider) et un DataGrid (DataGrid1) et qu'on veut que le bouton valider nous permette de récupérer la valeur de la deuxième colonne de la ligne sélectionnée Private Sub CMDValider _Click() If DataGrid1.Col = 0 And DataGrid1.Row = -1 Then MsgBox ("il faut faire un choix") Else With DataGrid1.Col = 1 MsgBox.Text Equivalent à DataGrid1.Columns(0) End With End If End Sub
32 Cours VB – ISG 2007/2008 Utilisation du DataGrid (2) Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer) Dim x As String Select Case ColIndex Case 0: x = "Code_Passager" Case 1: x = "Nom" Case 2: x = "Prénom" End Select x = x + " ASC" DEBillet.rsListe.Sort = x DataGrid1.Refresh End Sub code pour permettre le tri (dans lordre croissant) de DataGrid1 par clic sur lentête de chacune de ses colonnes.
33 Cours VB – ISG 2007/2008 Annexe Représentations graphiques
34 Cours VB – ISG 2007/2008 Représentations graphiques Pour rajouter des représentations graphiques il faut utiliser le contrôle Mschart (microsft chart control 6.0) Exemple: pour afficher le résultat de la requête suivante (BD: NWIND) relative à lobjet commande (NombreProduits) SELECT Catégories.`Nom de catégorie`, COUNT(*) AS `Nombre de produits` FROM Catégories, Produits WHERE Catégories.`Code catégorie` = Produits.`Code catégorie` GROUP BY `Nom de catégorie` ORDER BY COUNT(*)
35 Cours VB – ISG 2007/2008 Représentations graphiques Private Sub Command1_Click() On Error Resume Next DataEnvironment1.rsNombreProduits.Open ' Initialisation du graphe MSChart1.AllowSelections = False ' Interdit la sélection d'objet With MSChart1.chartType = VtChChartType2dBar ' type de graphe.ColumnCount = 1 ' nombre de barre.RowCount=DataEnvironment1.rsNombreProduits.RecordCount ' nb de lignes lecture des noms des catégories dans la BD For i = 1 To DataEnvironment1.rsNombreProduits.RecordCount.Row = i.Column = 1 le nom de catégorie. RowLabel =DataEnvironment1.rsNombreProduits.Fields(0) ' nombre de produits.Data = DataEnvironment1.rsNombreProduits.Fields(1) ' la catégorie suivante DataEnvironment1.rsNombreProduits.MoveNext Next i End With MSChart1.TitleText = "Nombre de produits par catégories" End Sub
36 Cours VB – ISG 2007/2008 Représentations graphiques Nom de catégorieNombre de produits Produits secs5 Viandes6 Pâtes et céréales7 Produits laitiers10 Poissons et fruits de mer12 Condiments12 Boissons12 Desserts13