VISUAL BASIC 6 ET L’ACCES AUX BASES DE DONNEES JOHN COUNELL RESUME La plupart des développeurs Visual Basic travaillent sur des applications faisant intervenir des bases de données. La deuxième étape de toute formation à Visual Basic, après la phas e d'apprentissage de la programmation visuelle orientée objet, est donc l'utilisation des contrôles ActiveX dédiés a l'accès aux données. Ce livre traite des deux technologies qui coexistent dans la version 6 de Visual Basic : . DAO (Data Access Objects), qui existait déjà dans les versions antérieures de VB, avec un usage limité aux bases de données bureautiques de type Access. . ADO (ActiveX Data Object), une nouvelle technologie, d'accès aux données, à la fois plus simple d'emploi, plus performante et plus universelle que DAO. ADO est aujourd'hui un élément essentiel de tous les produits Microsoft permettant de manipuler ou d'échanger des données: VB 6, VC++ 6, Access, Excel, IIS4/ASP2, Exchange, etc. Au sommaire . Introduction aux bases de données relationnelles . Utilisation de l'assistant Feuilles de données . Programmation de contrôles DAO et ADO . Création d'une interface utilisateur . Création de classes personnalisées pour une meilleure réutilisabilité . Manipulation des données avec le langage SQL . Principes de conception d'une base de données . Modèle objet de DAO . Exemple d'application: création d'un carnet d'adresses . Accès universel aux données avec ADO et OLE-DB . Création de contrôles ADO personnalisés . Construction d'une application Internet avec VB6, ,'\00 et ASP . Programmation ADO avancée: construction d'une application de datamining . Exportation des données aux formats Excel et HTML. . EN ANNEXE: corrigé des exercices. TABLE DES MATIERES Introduction 1 De quoi traite ce manuel ? A qui s'adresse ce manuel ? Les nouvelles fonctionnalités de Visual Basic 6.0 liées aux bases de données Notre approche De quoi avez-vous besoin pour utiliser ce Iivre ? Servi ce clientèle Où trouver le code source de cet ouvrage? Conventions Qu’ allez-vous découvrir ? Chapitre 1 Qu'est-ce qu'une base de données? 1 2 3 4 4 5 5 5 6 9 Pourquoi utiliser une base de données? Les bases de données Stocker des informations dans notre armoire de classement Obtenir l'information recherchée en effectuant une requête dans notre base de données Fichiers « à plat» et bases de données relationnelles Les composants d'une base de données relationnelle En savoir plus sur les bases de données relationnelles Qu'est-ce qu'une table? Fichiers et tables de base de données Biblio.mdb une base de données exemple Les données de Biblio.mdb Mettre à l index Qu'est-ce qu'une relation ? Les différentes relations qui existent entre les tables La clé des relations réussies Qui a la clé ? Enregistrements orphelins Normaliser nos données Passons à autre chose Rappel de quelques termes importants Access et Visual Basic Pourquoi utiliser Access ? La base de donne es relationnelle Biblio.mdb Créer un nouveau sous-repertoire Ou faire intervenir notre programme VB ? L'interface utilisateur Le moteur de base de données Jet: un moteur de base de donne es spécifique Les DLL l'essence du moteur Jet Jet est autonome Le magasin de données Tentons une approche Tables, enregistrements et champs de Biblio.mdb La table Publishers (Editeurs) La table Authors (Auteurs) La table Title Author (Titre-Auteur) Construire une relation Mais comment fait-il? Un bel avenir devant soi DAO ou ADO ? Au-delà. de l'enigme DAO-ADO DAO et ADO pour ou contre? Vive la diversité ! Faire votre choix en vue de la réutilisation Quelques bonnes nouvelles Résumé En clair L'étape suivante Exercices Chapitre 2 Faisons connaissance avec l'Assistant Feuilles de données de VB 6 Qu'est-ce que le contrôle de données ADO ? Le jeu d'enregistrements Découvrons l'Assistant Feuilles de données Qu'est-ce qu'un complément? Le produit final en mode creation Le produit final au moment de l'exécution Naviguer au sein du jeu d'enregistrements Utiliser différentes méthodes pour consulter la même information La feuille Principale /secondaire en mode création La feuille Principale /secondaire au moment de l'exécution La mise en page HflexGrid La mise en page MS Chart Ne vous fiez pas aux apparences ! 10 11 11 13 14 16 16 17 17 18 18 20 21 22 22 24 25 25 25 25 26 26 27 27 28 29 29 29 30 31 31 31 32 32 33 33 34 35 35 35 36 36 37 38 38 38 39 39 39 41 42 42 44 45 57 58 59 61 66 67 68 73 79 Méfiez-vous de l' Assistant Quelques précisions au sujet de la fonction tri 79 80 Initiation à l'ordre de tri ASCII Résumé A retenir Exercices 80 82 83 83 Chapitre 3 Programmer le contrôle des données Pourquoi ne pas laisser faire l'Assistant? Le contrôle de données et les contrôles dépendants Les contrôles intrinsèques Qu'est-ce qu'une DLL ? Rappel La liaison dynamique Le contrôle intrinsèque de données DAO Qu'est-ce qu'un jeu d'enregistrements ? Qu'est-ce qu'un contrôle de données dépendant ? Les différents types de contrôles dépendants mis à notre disposition Les contrôles intrinsèques Les contrôles ActiveX Travailler avec les contrôles de données Modifier les données L'ordre des événements Mais comment le sait-il? Relation parent /enfant dans le contrôle de données Le contrôle masqué Présentation du nouveau contrôle de données ActiveX ADO Le contrôle de données ADO et le contrôle dépendant DataList La propriété BoundColumn Le contrôle Hierarchical FlexGrid Qu'ont en commun tous ces contrôles ? Résumé A retenir Exercices Chapitre 4 85 85 86 87 88 88 89 90 91 92 92 92 95 100 101 101 103 109 111 112 122 128 132 132 132 133 Concevoir une interface utilisateur pour le contrôle de données 135 Créer l'interface utilisateur La feuille Visual Basic Explication des propriétés Explication de la programmation événementielle L'importance de l'ordre des événements de la feuille Retour a la programmation de bases de données Au cœur du contrôle de données Reproduire la fonctionnalité de l'Assistant Alors, on essaie? Les contrôles dépendants vus sous un autre angle Que se passe-t-il réellement lors de l'exécution de notre programme? Les jeux d'enregistrements vus sous un autre angle Les groupes de contrôles Dans les coulisses du contrôle de données La propriété BOFAction La propriété EOFAction La propriété Connect Un peu de code, et le tour est joué! Réduire les points pour obtenir une référence d'objet efficace La fonction IntelliSense Pourquoi le code est-il placé dans Form_Activate() ? L'événement Reposition du contrôle de données Flatter les yeux de l'utilisateur Apporter quelques améliorations Et maintenant ? A retenir A suivre Exercices 135 136 138 140 142 143 143 144 145 155 156 157 159 160 161 162 163 164 166 168 169 170 171 173 176 177 177 177 Chapitre 5 Programmer une interface utilisateur fiable 179 Le contrôle de données: adapté ou non? Créer une interface utilisateur améliorée 179 180 Le système de classes Revenons au contrôle de données Propriétés du contrôle de données Les méthodes du contrôle de données Les propriétés du jeu d'enregistrements Méthodes du jeu d'enregistrements Le concept de machine à états Créer une interface utilisateur fiable Mais voilà, il y a un problème Améliorer la navigation dans les enregistrements Un niveau d'adressage indirect Réutiliser le code Construire le code de navigation pour l'interface utilisateur L'instruction Case DbEditNone ne pas éditer ni ajouter d'enregistrements Construire une chaîne Instruction Case dbEditInProgress éditer un enregistrement Instruction Case DbEditAdd Ajouter un nouvel enregistrement Le sous-programme navigateButtons Empêcher l'édition accidentelle d'un enregistrement: le sous-programme LockFields Verrouiller et déverrouiller automatiquement nos champs de saisie de données Tous les petits trucs ont été ajoutés a nos boutons Ajouter les améliorations de l'interface à notre programme Incorporer le sous-programme updateButtons Attribuer un signet à un enregistrement Améliorer la manipulation des données par le biais de l'interface utilisateur Ajouter des enregistrements Editer des enregistrements Sauvegarder des enregistrements Supprimer des enregistrements Annuler les modifications apportées aux enregistrements Ajouter une référence S'amuser avec l'Explorateur d'objets Résumé A retenir Exercices 181 181 181 182 183 183 185 185 192 193 194 194 195 199 199 202 202 203 207 209 213 213 213 215 216 216 217 218 220 221 224 225 228 228 228 Chapitre 6 Parfaire interface utilisateur Ou en sommes-nous ? Quelques questions sur le déchargement de la feuille Assurer un déchargement uniforme de notre feuille La fonction MsgBox Utiliser App.EXEName Quelques réflexions sur la saisie de données Le focus, mais qu'est-ce que c'est exactement? Mettre le bon champ en surbrillance En savoir un peu plus sur le focus Définir l'ordre de tabulation Assurer le bon ordre des tabulations La propriété TabStop S'assurer que l'utilisateur ne change pas le champ PubID Utiliser la touche Entrée pour se déplacer vers le contrôle suivant Trouver un enregistrement particulier Comment le trouver? Ajouter un module de code à notre projet Créer une feuille générale Rechercher Mais comment y arriver? Et voilà! Plus besoin de taper le code! Tester la visionneuse d'Apl Quelques mots sur les variables globales Pourquoi ne pas utiliser de variables globales? Créer la feuille Rechercher Pourquoi ajouter des apostrophes doubles ("") à chaque champ? Un descripteur ? Mais qu'est-ce que c'est? 231 232 232 234 236 236 239 239 242 243 245 245 248 250 253 254 255 256 257 257 259 260 261 262 264 270 272 Lancez-vous et exécutez votre programme! Apporter la touche finale il la feuille Rechercher Valider les données: le cauchemar du programmeur L'évènement Validate Chapitre 7 L'argument Action L'argument Save Créer du code de validation Elargir l'utilisation du contrôle de données Résumé A retenir Exercices 283 284 284 287 288 289 290 Construire un module de classe pour le contrôle de données 291 Contenu du chapitre Les joies de la programmation répétitive Les modules de classes à la rescousse Composants réutilisables Une classe, mais qu'est-ce que c'est exactement? La terminologie POO Polymorphisme Héritage Encapsulation Copier votre programme Ce que nous allons faire Construire une classe dans Visual Basic 6.0 Ajouter du code à notre classe Encapsulation des données Les propriétés de notre classe Attribuer des valeurs il nos propriétés de classe Lire les propriétés de nos classes Définir des objets dans notre classe DataClass Définir une propriété en lecture seule ou en écriture seule Observons les propriétés de plus près La propriété Let Buttons La propriete Set dataCtl La propriete Let dbName La propriete Set FormName La propriete Let LabelToUpdate La propriete Set ProgressBar La propriete Let RecordSource La propriete Let Tag Retour au Générateur de classes Les méthodes de notre classe de donnees Ajouter du code à nos méthodes de classes Ajouter du code La méthode ProcessCMD La méthode updateButtons Le sous-programme d'aide navigateButtons Recapitulons Peaufiner le module de classe ClasseDonnées Rendre nos modèles utilisables dans tous les projets Visual Basic Validation de données... bis L 'Explorateur d' 0bjets Apporter la touche finale à notre classe ClasseDonnees Une feuille mere-fille: la classe du contrôle de données en action Les pièges d'une feuille de saisie de données mere-fille Résumé A retenir Exercices Chapitre 8 277 278 281 282 Extraire des données de la base Faisons les présentations ! SQL: langage ou technologie? Non, SQL tout court! SQL un collègue souple et coopératif Obtenir les données souhaitées 291 292 292 293 293 294 295 295 295 296 296 296 107 109 309 310 310 311 311 313 313 313 314 314 314 315 315 317 317 318 320 320 320 324 326 333 334 342 352 353 354 356 364 367 367 368 369 370 370 371 371 L'instruction SELECT L'instruction SQL la plus simple Construire le contrôleur de requêtes SQL Sélectionner certains champs d'une seule table Filtrer le jeu d'enregistrements retournés 372 372 373 380 382 La clause WHERE Correspondance partielle: la clause Like Enregistrements compris dans un intervalle la clause Between Extraire des enregistrements avec la clause lN Les conditions imbriquées Les champs Null La requête Delete Champs uniques ou non ? Trier le jeu d'enregistrements retourné Les opérateurs ensemblistes Attribuer un alias aux noms de la colonne Les valeurs Null Apparté statistique Regrouper les valeurs à l'aide de la clause GROUP BY Regrouper à l'aide de la clause HAVlNG Fusionner des tables La jointure interne La jointure externe L 'instruction SQL Update Ne vous fiez pas aux apparences ! Utiliser dans Visual Basic le code SQL généré par Access Assez de théorie! Créons un générateur d'instructions SQL dynamiques ! Que faire d' autre avec SQL ? Résumé A retenir Exercices 382 383 384 385 385 386 187 387 388 389 391 392 393 394 395 396 397 398 399 404 407 408 412 413 413 414 Chapitre 9 Conception, construction et analyse d'une base de données Règles générales relatives à l'utilisation des DAO et des ADO Fournir à Visual Basic 6.0 les références aux DAO Le carnet d' adresses personnel La normalisation Eléments de données non normalisés du Carnet d'adresses Première forme normale: éliminer tous les groupes répétés Deuxième forme normale: scinder les tables Troisième forme normale: éliminer les colonnes qui ne dépendent pas de la clé Créer notre base de données Quelle est la relation entre Access, VisData, le contrôle de données ? Jet et les DAO? Recommandations pour la création d'index Créer une base de données avec les DAO Serveur de fichiers ISAM et serveur client relationnel Accès aux données ISAM Accès aux données client-serveur de type relationnel Définition du modèle d'objets DAO 0bjets et coIlections Travailler avec des collections Obtenir et utiliser des objets contenus dans les collections Les objets base de données ReIier Ies points Les 0bjets Recordset Options d'ouverture d'un jeu d'enregistrements Analyser un fichier .mdb en utilisant les DAO Résume A retenir Exercices Chapitre 10 415 416 417 419 420 421 422 423 425 428 428 436 439 441 441 442 442 443 443 444 444 445 448 449 457 470 470 470 Programmer le Carnet d'adresses 473 Le contrôle Tab Micosoft Le contrôle StatusBar Le contrôle MaskedEdit 482 483 485 Passons à l'écriture du code Quelques informations supplémentaires sur le contrôle StatusBar La sous-routine clearFields La sous-routine lockFields La sous-routine updateTree La sous-routine updateForm 489 496 498 500 501 506 La sous-routine setUpListView Le programme Carnet d'adresses initialisé La sous-routine populateFields Convertir des dates La sous-routine populateListView Le code du contrôle ListView Trier le contenu du contrôle ListView La barre d'outils du Carnet d'adresses Valider la saisie des données Transmettre le contact a la base de données Revenons au contrôle ToolBar Ajouter des notes concernant un appel du contact courant La feuille frmAppel, lieu d'enregistrement des appels Juste quelques lignes de code La sous-routine updatedescriptionCombo Supprimer une description d'appel Ajouter un appel ou annuler l'opération? L ‘onglet Statistiques BD Comment fonctionne tout cela? Récapitulation générale A retenir Exercices 508 509 511 513 514 517 517 519 521 523 525 527 528 530 531 534 538 540 541 546 546 Chapitre 11 Utiliser ADO pour l'accès universal aux données Quelle est L’origine d' ADO ? Les limites de DAO A la recherche des données Une seule constante: le changement Retour vers le futur! L'accès universel aux données Pourquoi ADO est-il le moyen le plus simple d'accéder aux données? Initiation a ADO (ActiveX Data Objects) La clé de l'énigme: OLEDB ! Les propriétés du contrôle de données ADO Comparer les propriétés des contrôles de données ADO et DAO Le modèle objet ADO Etape 1 l'objet Connection Etape 2 ouvrir un jeu d'enregistrements Programmer avec les objets ADO Créer une source de données Utiliser la méthode Exécute de l'objet Connection Ouvrir les jeux d'enregistrements S'amuser avec les schémas A la recherche des types de données Redécouvrir l'Explorateur d'objets La collection Errors (ADO) Tout savoir sur le fournisseur de données A propos de la définition des références Une autre approche du modèle objet ADO L'objet Paramétrer Qu'est-ce qu'un curseur? Pourquoi les curseurs sont-ils importants dans ADO Les types de curseurs Ouvrir des jeu d'enregistrements ADO syntaxe Les options ConnectionString Les transactions et vous Une transaction ADO Utiliser quotidiennement les transactions Résumé A retenir Exercices 547 547 548 548 552 552 553 554 555 555 567 567 568 569 570 571 576 585 587 588 593 594 595 598 600 601 603 603 606 606 608 609 609 610 613 614 615 615 Chapitre 12 Créer des contrôles de données ADO ActiveX dépendants 617 Bien sur, nous pouvions déjà créer des contrôles ActiveX A la recherche d'un code réutilisable C++ et Visual Basic: historique rapide... et subjectif La liaison de données 618 618 619 620 Lier des champs à des contrôles Ecrire le code du module de classe maClasseDépendante L'événement Move Complete La procédure MoveNext Afficher l'état de Move Complete Coder la feuille frmExempleDépendant Coder l'événement Form Load Afficher la raison et l'état de l'événement MoveComplete du jeu d'enregistrements ADO Un choix facile pour l'utilisateur Exécuter le programme Récapitulation Créer notre propre contrôle de données Fixer la taille du contrôle Déclarer et générer des événements Ajouter des propriétés et des méthodes au contrôle Qu'en est-il lorsque la source des enregistrements n'est pas une table? Le groupe de contrôles cmdBouton Mettre à jour l'interface utilisateur Activer et /ou désactiver les boutons sur notre contrôle Verrouiller et déverrouiller les contrôles dépendants Les propriétés UserControl Les pages de propriétés: une petite touche de professionnalisme Ajouter une boite À propos de La ToolboxBitmap Tester notre programme La zone de texte liée Valider nos données Notre nouveau contrôle de données ADO ActiveX en action Elaborer le fichier .ocx en vue d'une distribution Notre contrôle dans le Registre Le contrôle DataRepeater, une exclusivite Visu al Basic 6.0 Utiliser le nouvel outil DataRepeater Ajouter des propriétés à notre contrôle Définir les attributs de la procédure Un dernier détour par l'Explorateur d'objets Résumé A retenir Exercices 621 623 626 628 629 629 630 Chapitre 13 ADO et ASP Les pages ASP HTML Créer des pages ASP Exécuter des pages ASP Comment installer le Serveur Web personnel sur votre machine Préparer un dossier pour nos exemples ASP, scripts et HTML Comment se présente un script ASP ? Notre premier script ASP Le miracle est dans le % ! Exécutons notre premier script ASP Les langages de script ASP Un exemple plus pousse d'ASP fonde sur ADO VBScript récupère les données et HTML les affiche Une application ADO client /serveur élémentaire Obtenir des données il partir du serveur Code de la feuille de requête Le côté serveur 631 631 632 633 634 639 642 644 646 647 655 657 658 659 664 669 673 674 678 679 681 682 684 685 686 689 691 699 699 700 700 701 701 703 704 705 705 711 712 713 713 715 716 720 720 724 728 729 730 732 Des données client permanentes grâce aux cookies Elaborer une application pour des données permanentes La feuille login.asp en action La page visitor.asp en action Créer la base de données site Visiteurs Créer notre fichier visitors.dll La fonction set Visitor La méthode getVisitor 737 738 739 742 746 747 748 750 Enregistrer la DLL La page newUser.asp en action La feuille updateNewUser.asp en action L'application en action Résumé A retenir Exercices 752 754 757 759 760 760 760 Programmation avancée avec ADO le data mining 763 Des données, partout des données Le data mining, ou comment exploiter au mieux les données L'algorithme ID3 Un outil d'analyse de produits Feuille de projet et initialisation du code ID3 Ouvrir la connexion il la base de données Initialiser notre table ID3 Renseigner notre contrôle FlexGrid Région-Langue-Pays Effectuer l'analyse Déterminer l'entropie des valeurs que nous avons ajoutées Trop d'entropie! Un mot sur la création de notre instruction SQL A retenir Exercices 763 764 765 765 772 774 775 779 788 798 804 812 813 813 Chapitre 14 Chapitre 15 Rendre nos données universellement disponibles Exporter des jeux d'enregistrements vers d'autres programmes Les fichiers délimités par des virgules Exporter en HTML Exporter vers Excel Exporter nos données vers un fichier délimité par des virgules Créer un fichier d'exportation .csv Exécuter le code La puissance de csv Exporter nos données en HTML Créer le fichier HTML Utiliser des objets pour envoyer des données ADO vers une feuille de calcul Excel La liaison tardive La liaison précoce Envoyer à Excel des informations relatives au jeu d'enregistrements ADO Le projet terminé Les techniques ADO avancées Qu'est-ce que les ADO avances? Les jeux d'enregistrements ADO déconnectes Les objets métier Mettre à distance un jeu d'enregistrements Créer un jeu d'enregistrements de connecte Créer un jeu d'enregistrements de connecte, c'est facile Tout est dans le curseur Mettre à jour notre base de données à partir du jeu d'enregistrements ADO distant La fonction createRecordset Changer des données du côte client Exécuter le programme Obtenir la proprieté AbsolutePosition Une autre merveille de ADO 2.0. les jeux d'enregistrements permanents Résumé A retenir Exercices 815 815 816 816 817 819 821 827 832 832 836 838 839 840 841 849 849 849 850 850 851 852 852 852 853 857 859 860 861 863 867 868 868 Chapitre 16 Et maintenant? RécapituIons Ce que nous avons étudié Ou en sommes-nous à présent? Ou allons-nous? Quelques mots d'avertissement Les étapes suivantes Le mot de la fin 869 869 869 870 871 871 871 872 Annexe A Un standard, plusieurs variantes La syntaxe [Field Name] La clause BETWEEN Les alias de colonne Les jointures Résumé 873 874 874 874 874 875 Annexe B Solutions 877 Chapitre 1 Chapitre 2 Chapitre 3 Chapitre 4 Chapitre 5 Chapitre 6 Chapitre 7 Chapitre 8 Chapitre 9 Chapitre 10 Chapitre 11 Chapitre 12 Chapitre 13 Chapitre 14 Chapitre 15 Qu'est-ce qu'une base de données? Faisons connaissance avec l'Assistant Feuille de données de Visual Basic 6 Programmer le contrôle de données Concevoir une interface utilisateur pour le contrôle de données Programmer une interface utilisateur fiable Peaufiner l'interface utilisateur Construire un module de classe pour le contrôle de données Extraire les données de la base Conception, construction et analyse d'une base de données Programmer le Carnet d'adresses Utiliser ADO pour l'accès universel aux données Créer des contrôles de données ADO ActiveX dépendants ADO et ASP Programmation avancée avec ADO – le data mining Rendre nos données universellement disponibles 877 878 879 880 881 883 884 885 886 888 890 891 892 894 894 Récapitulatif des types de données sous Access 897 Annexe C TOP