Les bases de données (suite) Support de cours Pascal Ballet La saisie et l'impression des données Les formulaires de saisie Les formulaires de saisie jouent deux rôles importants : - la mise en forme des données à saisir > en mettant en avant certaines données ou en en cachant d'autres (par exemple les numéros automatiques faisant office de clés) > en facilitant la sélection des données (par exemple pour un champ Titre, il pourrait exister une liste déroulante permettant à l'utilisateur de choisir entre Mme ou M) - la sécurisation de la saisie des données (il est aisé d'imaginer qu'après avoir saisi le champ Titre, le champ N°INSEE impose le chiffre 1 dans le cas de M et de 2 dans le cas de Mme pour le premier chiffre) Mise en forme des données à saisir Une base de données peut être observée sous différents "angles" à l'aide des formulaires de saisie. Il par exemple possible de n'afficher que les personnes nées avant 1980 ou bien celles résidant à Brest ou la combinaison des deux. On parle alors de filtres appliqués aux formulaires. Il est aussi possible dans un même enregistrement de n'afficher que certains champs. De plus, certains champs doivent contenir des données bien spécifiées à l'avance (Mme, M par exemple) ou bien doivent contenir des données en provenance d'une autre table. Dans ces cas, il est possible de faire apparaître les choix possibles à l'utilisateur sous forme de liste (déroulantes ou non) à l'utilisateur. Il est également possible d'agrémenter un formulaire de saisie avec toute sorte de contrôles (boutons, images, cases à cocher…) afin de rendre la saisie à la fois agréable, pratique et plus sûre. Sécurisation de la saisie des données Les données sont formatées au niveau des champs eux mêmes. Par exemple, un champ numérique ne pourra pas contenir de caractères ou un champ code postal (numéro de téléphone…) aura un format de saisie bien spécifique. De même un champ qui est une clé ne pourra pas accepter de doublon (c'est à dire une même donnée présente au moins 2 fois). Une partie de la sécurisation du contenu des données est donc assurée dors et déjà par le format des champs. Cependant, il est courant d'avoir des dépendances entre données (absence du champ date de mariage si la personne à moins de 18 ans, ou du nom de jeune fille pour un garçon…). Cette sécurisation, d'ordre sémantique, n'est pas assurée de manière simple par les SGBDr. C'est pourquoi, la sécurisation sémantiques peut être améliorée grâce à la sécurisation des formulaires de saisie. Pour cela, il est possible sous Access par exemple, d'utiliser (programmer) du code Visual Basic pour traiter précisément les cas spéciaux. Exemple d'un formulaire de saisie simple avec Access : Les états d'impression Un état permet d'imprimer (ou bien de sauvegarder un fichier imprimable (pdf, ps…)) les données d'une base de données avec une mise en forme élaborée. Les données peuvent être affichées de manière diverses et variées. Il peut s'agir par exemple d'afficher un ou plusieurs enregistrement par feuille, de placer le logo de votre société avec vos coordonnées, d'indiquer les éventuels termes d'un contrat... Ceci avec une ou plusieurs données de la base. Comme pour les formulaires, il est possible d'afficher certains champs et pas d'autres pour personnaliser les états. Il ne s'agit plus ici de sécuriser mais bien de présenter. Exemple d'état avec plusieurs enregistrement par feuille (page). Les requêtes Interroger la base est essentiel pour retrouver l'information désirée. Les requêtes permettent de manière plus précise que les filtres de retrouver une ou plusieurs données (les requêtes sont basées sur le langage SQL (Structured Query Language)qui est un langage travaillant sur des ensembles). Les requêtes ne servent pas simplement à retrouver des données, elles peuvent aussi ajouter supprimer ou modifier des données. Elles ont également la possibilité de modifier la structure même de la base par la création ou la modification des tables et de leurs relations. Les requête graphiques Access permet une mise au point graphique des requêtes, ce qui est bien pratique pour s'abstraire du langage SQL (que nous verrons par la suite). Par exemple, pour retrouver dans un carnet de numéro de téléphone les personnes dont le prénom est AAA, la requête sous forme graphique sera la suivante : et le résultat de cette requête est alors : Les critères peuvent être quelconque, plus précisément, toute formule mathématique et logique est applicable. Mettons en place maintenant une requête d'ajout qui va nous permettre d'ajouter à la table CarnetFavoris nos contacts préférés. Pour cela, il nous faut créer une nouvelle table Favoris qui va stocker le travail de la requête d'ajout. Ensuite, il faut créer la requête graphiquement : Comme critère simple pour le moment nous disons que nos contacts favoris sont ceux qui ont pour prénom AAA. Le résultat est le suivant : Naturellement, ces critères peuvent être beaucoup plus complet que ceux vu jusque là. C'est pourquoi, pour faciliter la mise au point des critères qui parfois sont complexes, Access intègre un générateur d'expression dont voici un aperçu : Nous rappelons que toute requête graphique est traduite en SQL même si elle utilise le générateur d'expression. Le langage SQL Toute requête est, in fine, traduite dans le langage SQL. C'est donc ce code SQL qui est interprété par le SGBDr pour faire les opérations de recherche, d'ajout, de modification ou de suppression de données. De même ce langage permet de modifier la structure même des tables et de leurs relations. Exemple de sélection et d'ajout de données La requête graphique précédente concernant la recherche des contacts dont le prénom est AAA s'écrit de la manière suivante en SQL : Pour la requête d'ajout, le code SQL est le suivant : Pour information, voici la traduction des commandes : INSERT INTO TableCarnetFavoris ( Nom, N°, Prénom, NumTel ) Insérer dans les champs ( Nom, N°, Prénom, NumTel ) de la table TableCarnetFavoris… SELECT TableCarnet.Nom, TableCarnet.N°, TableCarnet.Prénom,TableCarnet.NumTel la sélection des champs Nom, N°, Prénom, NumTel … FROM TableCarnet de la table TableCarnet… WHERE (((TableCarnet.Prénom)="AAA")); Où le champ Prénom de la table TableCarnet vaut "AAA" Exemple d'ajout de table CREATE TABLE Amis ([IDAmi] entier, [Nom] texte, [Prénom] texte, [DateNaissance] date, [Téléphone] texte, [Remarques] mémo, CONTRAINTE [Index1] CLÉ PRIMAIRE ([IDAmi])); Commandes courantes en SQL Syntaxe de la commande SELECT SELECT [ALL] | [DISTINCT] | [GROUP BY] | [HAVING] | [ORDER BY] <liste des champs> FROM <Liste des tables> [WHERE <expression logique>] L'option ALL est l'option par défaut. Elle permet de sélectionner l'ensemble des lignes satisfaisant à la condition logique. L'option DISTINCT permet d'éliminer les doublons. Dans la liste des champs, les champs doivent être séparé par des virgules. Lorsque l'on désire sélectionner l'ensemble des champs d'une table, le caractère * est à utiliser. La liste des tables indique l'ensemble des tables (séparées par des virgules) utilisées. La condition logique permet d'exprimer des critères divers à l'aide des opérateurs logiques, de comparateurs arithmétiques et des fonctions mathématiques courantes. Syntaxe de la commande WHERE Un critère consiste à sélectionner les enregistrements satisfaisant à une condition logique effectuée sur leurs valeurs (contenu). En SQL, les critères s'expriment à l'aide de la clause WHERE suivie d'une expression logique possédant les opérateurs suivants : logiques AND NOT OR comparateurs de chaîne BETWEEN IN LIKE arithmétiques + * / % (modulo) & (et) | (ou) ^ (puissance) ~ (non) comparaison = != (différent) > < >= (sup. ou égal) <= <> (différent) !> (non superieur) !< Exercice 1 NB : Nous utilisons ici la table sur les artistes et leurs titres effectué au premier cours. A- Ecrire le code SQL permettant de retrouver tous les titres d'un artiste. B- Ecrire le code SQL permettant pour un titre, de retrouver tous les artistes ayant participés. Exercice 2 On ajoute à la table Titres (ou Albums) un champ numérique intérêt. Ce champ comportera notre intérêt pour le morceau (ou l'album) en question. La valeur de ce champ varie entre 0 et 10. A- Ecrire une requête SQL permettant de créer une table titresFavoris dans laquelle se trouvera vos titre préférés. B- Ecrire une requête SQL permettant de stocker dans la table titresFavoris tous les titres de la table Titres (ou Album) dont 'intérêt est plus grand que 6.