Les Bases de Données en VB gestion des enregistrements Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion des enregistrements Cours VB 2007/2008
Le modèle ADO Modèle DAO Modèle ADO Data Access Object ActiveX Data Object L’objet Connection L’objet Commmand L’objet RecordSet La collection Errors Le modèle ADO est une bibliothèque d’instructions qui permet de gérer de nombreux paramètres pour se connecter et de manipuler des sources de données. DataEnvironment se base sur l’utilisation du modèle ADO mais offre plus de possibilités (exemple: possibilité de faire plusieurs connections) Cours VB – ISG 2007/2008
Objet Connection Cours VB 2007/2008
L’objet Connection L’objet Connection est utilisé pour établir une connexion avec une source de données : par exemple une base de données Access ou une base orientée Client-Serveur de type SQL Server ou Oracle. Différents paramètres peuvent être indiqués à l’objet Connection : Le fournisseur de données Le nom utilisateur Le mot de passe Les autorisations d’accès Cours VB – ISG 2007/2008
Création d'une connexion à un fichier de BD Access (1) Lorsque vous travaillez avec les données d'une base Microsoft Access, vous devez commencer par créer une connexion vers un fichier de base de données Microsoft Jet/Microsoft Access : Ajoutez à votre projet un concepteur Data Environment (Ajouter Data Environnement dans Plus de connexion Activex dans le menu Projet.) ou ouvrir un projet de données (ProjetData). Remarque : Si le concepteur d'environnement de données n'est pas disponible dans le menu Projet, ajoutez-le à votre environnement Visual Basic. Cliquez sur Composants dans le menu Projet, cliquez sur l'onglet Concepteurs, puis activez la case à cocher correspondant à son nom dans la liste des concepteurs. Cours VB – ISG 2007/2008
Création d'une connexion à un fichier de BD Access (2) Définissez les propriétés de connexion pour le concepteur. cliquez à l'aide du bouton droit de la souris sur l'objet Connection dans votre concepteur Data Environment, puis choisissez Propriétés depuis le menu contextuel : Sélectionnez un fournisseur JET 4.0 OLE DB sur l'onglet Fournisseur de la boîte de dialogue. Puis cliquez sur Suivant et entrez le chemin d'accès au fichier de la base de données Remarque Vous pouvez définir les propriétés supplémentaires de connexion en cliquant sur les onglets Paramètres avancés ouTous, ou tester la connexion en cliquant sur Tester la connexion. Cours VB – ISG 2007/2008
Recap JET 4.0 OLE DB BD Projet VB Access 1 ou ++ Data Environnement Cours VB – ISG 2007/2008
Objets commandes Objets Recordset Cours VB 2007/2008
L’objet Command Dans la hiérarchie ADO l’objet Command se place après l’objet Connection et détermine le type de tables ou les requêtes SQL qui interpelleront les tables. En fonction des différents fournisseurs de données ces paramètres peuvent varier : Table Vue Texte d’une requête SQL Relation Regroupement Type de position du curseur Type de verouillage .. Cours VB – ISG 2007/2008
Création d'un objet Command d'environnement de données Une fois créée la connexion à votre BD, vous pouvez utiliser le concepteur Data Environment pour créer les objets Command qui vous donneront accès aux données. Par exemple, vous pouvez créer un objet Command simple qui vous donne accès aux données d'une table et un autre objet Command, plus complexe, basé sur une requête. Pour créer un objet Command d'environnement de données simple: Ouvrez un concepteur Data Environment Créez l'objet Command Data Environment bouton droit sur la connexion Ajouter une commande bouton droit sur l'objet Command Propriétés spécifier le nom de l'objet Command, la connexion qu'il utilise et la source de ses données dans la boîte de dialogue Propriétés de Command. Cours VB – ISG 2007/2008
Objet commande basée sur une table Par exemple, pour créer un objet Command basé sur la table Clients de la base Les comptoirs, définissez les propriétés suivantes : Cours VB – ISG 2007/2008
Objet commande basée sur une requête Ouvrir un concepteur Data Environment existant ou en créer un nouveau. Créez l'objet Command mais au lieu de sélectionner un objet base de données spécifique comme base de la commande, sélectionnez comme source de la commande Instruction SQL. Ensuite, cliquez sur le bouton Générateur SQL pour ouvrir le Concepteur de requêtes dans lequel vous spécifiez les tables, les champs et les critères de la requête. Cours VB – ISG 2007/2008
Exemple – Client français Créez une requête qui retourne des informations sur les clients français Glisser la table Client de la fenêtre Fenêtre Données (disponible dans le menu Affichage) Cliquez sur la case à cocher à côté des champs que vous voulez inclure dans la requête. Spécifiez les critères de la requête en entrant « France » dans la case Critère du champ Pays dans la grille du Concepteur de requêtes. Lorsque vous spécifiez les champs et les critères, le Concepteur de requêtes crée automatiquement l'instruction SQL sous-jacente de la requête Pour afficher les résultats de la requête, cliquez avec le bouton droit de la souris sur le Concepteur de requêtes et sélectionnez exécuter. Le Concepteur de requêtes affiche le résultat produit. Cours VB – ISG 2007/2008
Exemple – Client français SELECT Adresse, `Code client`, `Code postal`, Contact, Fax, Fonction, Région, Société, Téléphone, Ville FROM Clients WHERE (Pays = 'france') Cours VB – ISG 2007/2008
Exemple – Commandes des Client français Exemple: Créez une requête qui retourne des informations sur les commandes des clients français Glisser les tables Clients et Commandes Cliquez sur la case à cocher à côté des champs que vous voulez inclure dans la requête. Spécifiez les critères de la requête en entrant « France » dans la case Critère du champ Pays dans la grille du Concepteur de requêtes. SELECT Commandes.* FROM Clients, Commandes WHERE Clients.`Code client` = Commandes.`Code client` AND (Clients.Pays = 'france') Cours VB – ISG 2007/2008
Exemple – Commandes des Client français Pour créer une grille de données qui affiche les commandes des clients français: Sélectionnez l'objet Command ClientsFrancais. Glissez l'objet Command vers une feuille vide à l'aide du bouton droit de la souris: Visual Basic affiche un menu contextuel dans lequel vous choisissez de créer une grille de données (DataGrid) ou un contrôle dépendant. Lorsque vous sélectionnez DataGrid, Visual Basic crée automatiquement une grille de données qui affiche les enregistrements du jeu d'enregistrements de la commande. Lorsque vous exécutez la feuille, Visual Basic affiche les enregistrements retournés par l'objet Command ClientsFrancais dans une grille de données. Cours VB – ISG 2007/2008
L’objet Recordset (1) A chaque objet Command est associé un objet Recordset qui représente les enregistrements retournés par ce dernier L'objet Recordset utilise le même nom que l'objet Command mais lui ajoute un préfixe «rs» (Recordset). Exemple: lorsque le concepteur d'environnement de données crée la commande TableClients, il crée aussi un objet Records et nommé "rsTableClients." Chaque ligne d’un objet Recordset comprend un ou plusieurs champs représentant un ou plusieurs objet Field. Cours VB – ISG 2007/2008
L’objet Recordset (2) Le Recordset se base sur l’utilisation de quatre types de curseurs définis dans ADO : Curseur dynamique (=2): permet de visualiser les ajouts, les modifications et les suppressions effectués par d'autres utilisateurs. Il permet également tout type de déplacement ne nécessitant pas l'utilisation de signets dans l'objet Recordset. Ce type de curseur permet l'utilisation de signets si le fournisseur est en mesure de les prendre en charge. Curseur à jeu de clés (=1) : son fonctionnement est identique à celui d'un curseur dynamique mais il ne permet pas de visualiser les enregistrements ajoutés par d'autres utilisateurs ou d'accéder aux enregistrements qu'ils ont supprimés. Les modifications effectuées sur les données par les autres utilisateurs sont néanmoins visibles. Ce type de curseur prend toujours en charge les signets et il permet donc tout type de déplacement dans l'objet Recordset. Cours VB – ISG 2007/2008
L’objet Recordset (3) Curseur statique (=3) : fournit une copie statique d'un jeu d'enregistrements que vous pouvez utiliser pour rechercher des données ou créer des rapports. Il permet l'utilisation de signets et rend donc possible tout type de déplacement dans l'objet Recordset. Les ajouts, modifications et suppressions effectués par d'autres utilisateurs ne sont pas visibles. Ce type de curseur est le seul autorisé si vous ouvrez un objet Recordset côté client . Curseur à défilement en avant (=0) : son fonctionnement est identique à celui d'un curseur dynamique, mais vous pouvez uniquement parcourir les enregistrements vers l'avant. Ce type de curseur permet d'obtenir de meilleures performances lorsque vous devez parcourir une seule fois un objet Recordset. Cours VB – ISG 2007/2008
L’objet Recordset (4) Important : Vous pouvez faire référence à l'objet Command dans le code comme à une commande du Data Environment, et faire référence à son jeu d'enregistrements comme à une propriété du Data Environment. Exemple: si vous créez la commande TableClients dans un DataEnvironment nommé DataEnvironment1, vous pouvez faire référence à la commande dans le code de la façon suivante : DataEnvironment1.TableClients Vous pouvez faire référence au jeu d'enregistrements sous-jacent de l'objet Command de la façon suivante : DataEnvironment1.rsTableClients Cours VB – ISG 2007/2008
Recap BD Access Projet VB JET 4.0 OLE DB 1 ou ++ Data Environnement Objet command RecordSet . . Objet command RecordSet Cours VB – ISG 2007/2008
Création d'une feuille dépendante des données simple Cours VB 2007/2008
Création d'une feuille dépendante des données simple(1) Glissez un objet Command (basé sur une table ou une requête) du concepteur Data Environment vers une feuille vide. Visual Basic créée automatiquement des contrôles TexBox pour afficher les données à partir du Recordset de l'objet Command et définit des propriétés de données qui lient les contrôles aux champs du Recordset. On dit, il crée des champs dépendants !!!!!ca depend droite ou gauche souris Cours VB – ISG 2007/2008
Création d'une feuille dépendante des données simple(2) Si vous regardez dans les propriétés de ces différents champs, dans la catégorie "Données" vous remarquerez 3 propriétés intéressantes qui sont: Datasource Datamember Et datafield Dans l'exemple de la Table Clients, les 2 premiers champs ont les valeurs suivantes: Datasource = DataEnvironment1 DataMember = TableClients Puis, pour chaque champ de saisie, la propriété Datafield va variée et prendre le nom du champ auquel il est lié. Exemple: Pour le champ 'tctCodeClient' la propriété Datafield = 'Code Client' Cours VB – ISG 2007/2008
Création d'une feuille dépendante des données simple(3) Cours VB – ISG 2007/2008
Création d'une feuille dépendante des données simple (4) Remarque: Si une feuille contient des contrôles dépendants alors si on modifie la valeur d’un champ puis on navigue dans les enregistrements alors c’est comme si on a fait update Deux solutions sont possibles: bloquer les zones textes dépendantes (locked=true) et ajouter un bouton modifier ne pas utiliser les contrôles dépendants et utiliser les fields avant le update Cours VB – ISG 2007/2008
Ouverture des recordsets Il faut lors du chargement de la feuille ouvrir les objets commandes concernés et les fermer à la fin Exemple: DataEnvironment1.rsCTProduitsCritères.Open ……. DataEnvironment1.rsCTProduitsCritères.Close Remarque: Si un objet commande est lié à des contrôles alors ils sont ouverts par défaut Cours VB – ISG 2007/2008
Consultation ou Navigation Cours VB – ISG 2007/2008
Navigation dans les enregistrements Un RecordSet offre plusieurs méthodes qui permettent de naviguer dans les enregistrements : MoveFirst déplacement vers le premier enregistrement MoveLast déplacement vers le dernier enregistrement MoveNext déplacement vers l’enregistrement suivant MovePrevious déplacement vers l’enregistrement précédent Cours VB – ISG 2007/2008
Exemple de navigation dans les enregistrements (1) Private Sub CmdPremier_Click() If DataEnvironment1.rsTableClients.RecordCount > 0 Then DataEnvironment1.rsTableClients.MoveFirst End If End Sub Rq 2006 J’ai modifié le move apres le if afin d’éviter les erreurs Private Sub CmdDernier_Click() If DataEnvironment1.rsTableClients.RecordCount > 0 Then DataEnvironment1.rsTableClients.MoveLast End If End Sub Cours VB – ISG 2007/2008
Exemple de navigation dans les enregistrements (1) Private Sub CmdPrécédent_Click() With DataEnvironment1.rsTableClients If .RecordCount > 0 Then .MovePrevious If .BOF = True Then .MoveLast End If End With End Sub Private Sub CmdSuivant_Click() With DataEnvironment1.rsTableClients If .RecordCount > 0 Then .MoveNext If .EOF = True Then .MoveFirst End If End With End Sub Cours VB – ISG 2007/2008
Ajout Cours VB – ISG 2007/2008
Ajout La méthode AddNew ajoute un nouvel enregistrement au recordset (vide) Remarque: il faut que la propriété locktype de la commande soit différente de lecture seule (exemple Optimiste) Syntaxe : recordset.AddNew [FieldList, Values] Où FieldList et Values sont des paramètres facultatifs permettant d'entrer directement des valeurs dans le nouvel enregistrement. Dès l'appel de AddNew, l'enregistrement créé devient l'enregistrement en cours. Nouveau (AddNew) vide les champs puis Valider (Update) valide l'ajout ou Annuler (CancelUpdate) annule l'ajout Cours VB – ISG 2007/2008
ou Exemple With DataEnvironment1.rsTableClients .AddNew .Fields(“Code client") = “C1" .Fields("Société") = "RABILLOUD" .Fields("Ville") = "Paris" .Fields("Code postal") = 750014 .Update End With ou With DataEnvironment1.rsTableClients .AddNew ![Code client] = “C1" ![Société] = "RABILLOUD" ![Ville] = "Paris" ![Code postal] = 750014 .Update End With Cours VB – ISG 2007/2008
Ajout Si on appelle AddNew avec paramètres le Update est lancé implicitement. Exemple: DataEnvironment1.rsProduits.addnew array("Réf produit", "Nom du produit"), array(144, "Ordinateur") Permet d'ajouter directement le nouveau enregistrement dans la table produits Cours VB – ISG 2007/2008
Modification Cours VB – ISG 2007/2008
Modification La méthode Update sauvegarde les modifications apportées à l'enregistrement en cours. Syntaxe : recordset.Update [Fields, Values ] Où Fields et Values sont la liste des champs et des valeurs à modifier (facultatif). Remarque: on ne peut pas modifier la clé Cours VB – ISG 2007/2008
Annulation La méthode CancelUpdate annule les modifications apportées à l'enregistrement en cours (annule aussi l'ajout si l'enregistrement en cours vient d'être créé) Syntaxe : recordset.CancelUpdate Remarque: si les MAJ sont directement faite sur un datagrid CancelUpdate ne marche pas donc si on a une feuille qui contient des champs dépendants et datagrid on peut lier les champs dépendants à un objet commande et le datagrid à un autre objet commande. Ou bien on peut utilisé l’instruction Cancelbatch. Cours VB – ISG 2007/2008
Exemple Private Sub Cmdvalider_Click() DataEnvironment1.rsCTProduits.Update SSTab1.Enabled = True End Sub Private Sub CmdAnnuler_Click() DataEnvironment1.rsCTProduits.CancelUpdate SSTab1.Enabled = True End Sub Cours VB – ISG 2007/2008
Suppression Cours VB – ISG 2007/2008
Suppression La méthode Delete permet de supprimer l’enregistrement courant Syntaxe recordset.Delete Remarque: On ne peut pas supprimer des enregistrements liés (intégrité référentielle) il faut dans ce cas supprimer les enregistrements connexes avant (il faut parcourir ces tables en supprimant les enregistrements connexes ) Cours VB – ISG 2007/2008
Exemple Private Sub cmdsupprimer_Click() If MsgBox("Voulez vous supprimer", vbYesNo + vbQuestion, "GSC") = vbNo Then Exit Sub End If DataEnvironment1.rsTCentre.Delete If DataEnvironment1.rsTCentre.RecordCount > 0 Then DataEnvironment1.rsTCentre.MovePrevious Else DataEnvironment1.rsTCentre.AddNew DataEnvironment1.rsTCentre.CancelUpdate End Sub Cours VB – ISG 2007/2008