370 likes | 438 Views
Complément Chapitre 6. Les Bases de Données en VB Exemples. Contrôles dépendants. Préparation de l’interface. Dim aj As Integer Private Sub cmdajouter_Click() aj = 1 Call MAJAffichage(Me, aj) DataEnvironment1.rsTAutor.AddNew txtNumAutorisation.SetFocus End Sub.
E N D
Complément Chapitre 6 Les Bases de Données en VB Exemples Cours VB 2007/2008
Contrôles dépendants Cours VB 2007/2008
Préparation de l’interface 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 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 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 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 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 – ISG 2007/2008
Contrôles indépendants Cours VB 2007/2008
Préparation de l’interface 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 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 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 Cours VB – ISG 2007/2008
Préparation de l’interface 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 Cours VB – ISG 2007/2008
Sub AfficherEnregistrement () WithDataEnvironment1.rsTAutor .bookmark = sauv txtNumAutorisation =.Fields("NumAutorisation") txtNature =.Fields("Nature") txtQtéAutorisation = .Fields("QtéAutorisation") End with End Sub Sub AffecterValeur () WithDataEnvironment1.rsTAutor .Fields("NumAutorisation") = txtNumAutorisation .Fields("Nature") = txtNature .Fields("QtéAutorisation") = txtQtéAutorisation end with End Sub 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 Cours VB – ISG 2007/2008
Actualisation de recodeset (Requery) 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 Cours VB – ISG 2007/2008
Exemple Gestion de la table commandes Cours VB 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 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 If End With End Sub Cours VB – ISG 2007/2008
Consultation ou Navigation 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 If End With End Sub 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 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 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 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 – ISG 2007/2008
collection Errors Cours VB 2007/2008
La collection Errors • C’est 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 d’accès aux données au cours d’une opération avec le fournisseur de données. Cours VB – ISG 2007/2008
Exemple Private Sub Cmdvalider_Click() On Error GoTo etiq DataEnvironment1.rsCTProduits.Update Exit Sub etiq: If Err.Number = -2147467259 Then MsgBox "Mon message pour doublon" End Sub Cours VB – ISG 2007/2008
Erreurs !! Réagissons avant !!! 1 2 1 – 2 – Cours VB – ISG 2007/2008
Erreurs !! Réagissons avant !!! 3 4 3 – 4 – Cours VB – ISG 2007/2008
Erreurs !! Réagissons avant !!! 5 6 5 – 6 – Cours VB – ISG 2007/2008
Annexe DataGrid Cours VB 2007/2008
Utilisation du DataGrid (1) • Supposons qu'on a un bouton de commandeValider (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 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 l’ordre croissant) de DataGrid1 par clic sur l’entête de chacune de ses colonnes. Cours VB – ISG 2007/2008
Annexe Représentations graphiques 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 à l’objet 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(*) 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 Cours VB – ISG 2007/2008
Représentations graphiques Nom de catégorie Nombre de produits Produits secs 5 Viandes 6 Pâtes et céréales 7 Produits laitiers 10 Poissons et fruits de mer 12 Condiments 12 Boissons 12 Desserts 13 Cours VB – ISG 2007/2008