1. Présentation d’Open Office Base :

Open Office Base (OOB) est un SGBD qui permet la création et la manipulation des bases de données. Il fournit également un certain nombre d’outils d’assistance au développement des BDD (assistant de création de tables, assistant de création de requêtes, etc.).

OOB

L’interface d’Open Office Base se présente en quatre zones. La Zone A « colonne Base de données » regroupe les différents modes de travail (Tables, Requêtes, Formulaires et Rapports). La zone B « tâches» propose les différents choix possibles pour le mode de travail actif. La zone C liste les différents objets crée dans chaque mode.  Enfin, la zone D permet de visualiser le contenu de l’objet sélectionné dans la zone C.     

2. Objectif du TP

Dans ce TP, nous allons voir comment utiliser une base de données SQL à partir d’Open Office Base. L’objectif est de bénéficier des fonctionnalités fournies par OOB qui facilitent la manipulation des Bases de données (BDD). Deux types de fonctionnalités seront abordés :

·        les formulaires facilitant la saisie et la modification d'enregistrements;

·        les rapports permettant la mise en forme de résultats de requêtes.

Attention :

·        Avant de commencer le TP, il est essentiel d’effectuer les étapes de préparation de la machine : Lien vers la page de préparation (Aller sur ce lien : Préparation).

 

3. Formulaires

Les formulaires servent à la saisie d'enregistrement dans des tables existantes. Ils sont utilisés pour orienter la saisie de manière à éviter des données incohérentes ainsi que pour améliorer l'apparence et l'ergonomie des interfaces de saisie. Il existe deux manières de créer des formulaires sous OO Base :

Lorsque le formulaire a pour objectif d'éditer les enregistrements d'un table ou résultant d'une requête, il est préférable d'utiliser l'assistant qui permet une création plus rapide d'un formulaire, quitte à le modifier ensuite.

3.1. Édition des enregistrements d'une table

Nous allons créer un premier formulaire en utilisant l'assistant d'OO Base.

Lancez l'assistant de création de formulaires. La création du formulaire se déroule en 8 étapes.

  1. Sélection de champ. Il faut d'abord sélectionner la table ou requête concernée puis les champs que l'on souhaite éditer. Sélectionnez tous les champs de la table Agence.
  2. Paramétrer un sous-formulaire. Cette étape sera détaillée plus tard. Pour l'instant nous n'utiliserons pas de sous-formulaire.
  3. Ajouter des champs de sous-formulaire. Cette étape sera détaillée plus tard.
  4. Obtenir des champs joints. Cette étape sera détaillée plus tard.
  5. Positionner les contrôles. Cette étape sert à choisir un positionnement des champs dans le formulaire. Le résultat de ce choix peut être vu directement dans le formulaire édité. Choisissez un mode de disposition.
  6. Définir la saisie des données. On définit le mode d'utilisation du formulaire, c'est-à-dire, si on peut insérer, supprimer et/ou modifier des données dans la table ou requête concernée. Choisissez un mode permettant de voir toutes les données sans pouvoir supprimer ou modifier les données existantes.
  7. Appliquer les styles. Ici, on choisit l'apparence graphique du formulaire.
  8. Définir un nom. Il ne reste plus qu'à nommer le formulaire.

Vous pouvez ensuite ouvrir le formulaire pour consulter les enregistrements de la table. Un champ de texte en bas du formulaire indique le nombre total d'enregistrements et celui que vous consultez. Vous pouvez vous déplacer dans ces enregistrements en cliquant sur les flèches situées à côté. Pour insérer un nouvel enregistrement vous pouvez vous déplacer jusqu'à l'enregistrement suivant le dernier existant où cliquer sur la flèche verte.

formulaire1-insertion

Consultez les enregistrements existant et ajouter une nouvelle Agence. Vérifiez que cet ajout est bien effectué dans la table Agence. Pour enregistrer une nouvelle insertion, cliquez sur l'icône représentant une flèche verte sur une disquette.

3.2. Modification d'un formulaire

Le formulaire généré peut ensuite être modifié en sélectionnant le menu "Modifier" après un click droit sur le formulaire. La position des contrôles peut ainsi être modifiée. La configuration des contrôles et du formulaire peut aussi être modifiée après un click droit sur l'objet concerné.

Dans le formulaire généré, chaque objet de contrôle (les champs de texte) est lié à un champ d'étiquette. Pour ne sélectionner que l'un des deux objets cliquez dessus en appuyant sur la touche Ctrl. Sélectionnez le champ de texte correspondant au code de l’agence puis ouvrez la boîte de dialogue d'édition des paramètres de ce contrôle (click droit -> contrôle...). La boîte de dialogue dispose de 3 onglets pour paramétrer le contrôle.

  1. Général. Les paramètres généraux sont regroupés ici. Ces paramètres dépendent de la nature du champ de contrôle et concernent principalement l'apparence et les modalités de saisie. On peut noter dans cet onglet quelques paramètres intéressants :

controleGeneral

1.     Données. Cet onglet fait le lien entre le contrôle et les données de la base. Ici aussi, la nature du champ détermine les paramètres. Au minimum, on retrouve deux paramètres :

·        Champ de donnée qui associe un champ de la table ou de la requête au contrôle.

·        Saisie requise qui oblige ou non à saisir une valeur.

controleDonnees

2.     Événements. Cet onglet associe des actions à effectuer avec certains événements. Cette partie n'est pas détaillée dans ce TP.

 

Réalisez un formulaire permettant l’ajout dans la table modele puis les contrôles correspondant à la date de sortie (Année) pour passer le paramètre "Déroulante" à la valeur "Oui". Cela aura pour effet de pouvoir choisir une date dans une boîte de dialogue.

 

3.3. Restriction des saisies

Parmi les paramètres d'un contrôle liés aux données, il est possible de restreindre les saisies possibles, par exemple en limitant les choix possibles dans une liste. Les contrôles proposant des listes disposent ainsi d'un paramètre "Contenu de liste" qui détermine les choix possibles. Ce paramètre est souvent une requête SQL renvoyant l'ensemble des valeurs possibles. Dans l'exemple ci-dessous la liste consiste en l'ensemble des identifiants des agences.

RestrictionDonnee

Créez un nouveau formulaire pour saisir de nouveaux stocks (sans que ce formulaire ne permette de visualiser les services déjà existants). Testez ce formulaire en essayant de créer un stock faisant référence à un numéro d’agence, de model ou de finition qui n'existe pas.

Est-ce que cet ajout fonctionne ? Comprenez-vous pourquoi ?

Modifiez le formulaire pour remédier à ce problème :

Option 1 :

Modifiez le formulaire créé et supprimer le contrôle de saisie du numéro d’agence (attention, ne supprimez pas le champ d'étiquette associé). Ajoutez à sa place un contrôle de type "Boîte (ou zone) combinée " (les contrôles disponibles sont dans la barre d'outils des contrôles sur la gauche).

Une boîte de dialogue s'ouvre alors pour vous assister dans cette création.

  1. La première étape consiste à sélectionner la table ou la requête dans laquelle les données de la liste à proposer sont contenues.
  2. Ensuite vous devez sélectionnez le champ concerné.
  3. Enfin, vous devez décider si la valeur du contrôle doit ou non servir à donner une valeur à un champ de la table édité par le formulaire. Si oui, il faut spécifier quel champ prend la valeur choisi.

Option 2 :

Modifiez le formulaire créé en remplaçant le contrôle de saisie du code agence par un contrôle de type "Boîte combinée".

1.     Sélectionnez le champ de contrôle

2.     Cliquez sur le bouton droit de la souris

3.     Choisissez "Boîte combinée" dans la liste remplacer par.

4.     Allez dans les propriétés de la "Boîte combinée"  et éditez dans la section le champ contenu de liste de l’onglet "Données".

 

3.4. Sous-formulaires

Un formulaire n'est associé au plus qu'à une table ou une requête. Il est cependant possible de lui attacher des sous-formulaires associés à d'autres tables ou requêtes pour visualiser ou éditer des données jointes. Le principe général est que la valeur saisie dans le formulaire principal est utilisée pour effectuer une jointure avec une autre table (ou résultat de requête) dont les données sont affichées dans un sous-formulaire.

Toujours avec l'assistant, créez un nouveau formulaire pour insérer de stocks. À l'étape "Paramétrer un sous-formulaire", sélectionnez "Ajoutez un sous-formulaire".

Sous-formulaires

OO Base vous propose un ensemble de sous-formulaires correspondant aux tables possédant des clés étrangères vers la table du formulaire principal. Ici, aucune table n’est proposée car aucune table  n’a de clé étrangère qui vers l’identifiant de la table "Atelier".

Comme nous souhaitons afficher des informations sur les agences. Nous allons sélectionnez l'option demandant une saisie manuelle des champs et passez à l'étape suivante.

Les champs du sous-formulaire doivent alors être sélectionnés. Choisissez la table Agence et ces champs CodAg, Dpt et Ville.

La quatrième étape demande de définir manuellement la jointure à appliquer. Définissez une jointure entre les champs CodeAg et Cd_ag.

jointure

 

Nous souhaitons ici utilisez le sous-formulaire uniquement pour visualiser le département et la ville de l'agence sélectionnée pour l’atelier à ajouter. Il ne faut pas pouvoir modifier la valeur de ces champs.

Modifiez le formulaire pour utiliser des boîtes combinées comme précédemment pour que les champs liés à l'agence ne soit pas modifiable. Vous pouvez aussi supprimer les composants affichant le nom de l'agence qui sont ici redondants.

Sous-formulaires2

4. Rapports

Les rapports sont utilisés pour présenter une information issue de la base de données aux utilisateurs. En ce sens, leur rôle est similaire à celui des requêtes. Cependant le rôle du rapport n'est pas de présenter un résultat brut mais mis en forme pour affichage ou impression. Il existe deux types de rapports :

Dans ce TP, nous ne considérerons que des rapports dynamiques.

4.2. Rapport dynamique fondé sur une table

Le premier rapport à créer va afficher les coordonnées de toutes les agences du concessionnaire. Sélectionnez la partie "Rapports" et cliquez sur "Utiliser l'assistant pour créer un rapport...". La création d'un rapport passe par 6 étapes.

1.     Sélection de champ où vous devez sélectionner la source du rapport et les champs concernés. Sélectionnez tous les champs de la table Agence.

2.     Étiquetage des champs où vous devez choisir un nom d'étiquette pour chaque champ. Définissez vos étiquettes de champ.

3.     Groupement pour définir des groupes dans les informations à produire sur le rapport en fonction de la valeur de certains champs. Pour l'instant, ne faites pas de groupement.

4.     Options de tri pour choisir les champs qui seront utilisés pour trier les résultats. Triez selon le numéro de département d'abord puis par ville dans un même département.

5.     Composition pour choisir l'apparence du rapport. Mettez en forme selon votre goût.

6.     Créez un rapport où vous choisissez un nom et le type de rapport. Choisissez un rapport dynamique.

Comme pour les formulaires il est possible de modifier la structure du rapport après sa génération par un click droit sur le rapport et en sélectionnant "Modifier".

Rapport1

 

4.3. Rapport dynamique fondé sur une requête simple

Un rapport peut être généré à partir d'informations provenant de plusieurs tables. Pour cela, il faut préalablement écrire une requête qui récupère l'ensemble des informations requises en effectuant les jointures et sélections nécessaires.

Écrivez une requête qui effectue une jointure entre les tables Modele, Finition et Stock. La requête doit renvoyer les valeurs des champs gamme, sigle, moteur et pack de tous les véhicules en supprimant les doublons (l'objectif est de connaître toutes les combinaisons existantes). Vérifiez que la requête fonctionne correctement.

Créez un nouveau rapport dynamique fondé sur cette requête. Dans ce rapport, regrouper les résultats selon le nom de la finition de manière à faire apparaître pour chaque finition les modèles qui la propose.

3.4. Rapport dynamique fondé sur une requête paramétrée

Les requêtes paramétrées sont des requêtes incomplètes qui nécessitent une saisie de l'utilisateur pour leur exécution. Certaines parties de la requête sont en effet non définis et remplacés par des paramètres dont la valeur sera demandée à chaque exécution.

Un paramètre est indiqué dans une requête en SQL par : suivi du nom du paramètre qui sera utilisé pour demander une saisie à l'utilisateur. Par exemple, la requête :

SELECT CodeMo, Gamme  FROM modele WHERE Sortie > :Entrer_année_de_sortie

Demander d'abord à l'utilisateur de rentrer une valeur pour le paramètre "Entrez_année_de_sortie" puis se servira de cette valeur pour effectuer une sélection sur les modèles dont la date de sortie est supérieure à une date donnée.

Écrivez en SQL une requête paramétrée renvoyant le numéro, la ville et le numéro de téléphone des agences d'un département donné, où le numéro de département est le paramètre de la requête.

requete_paremetre requete_paremetre2

Un rapport peut s'appuyer sur une requête paramétrée et ainsi nécessiter la saisie d'un paramètre pour générer le rapport.

Créez un rapport dynamique fondé sur la requête précédente.

Un rapport peut s'appuyer sur une requête paramétrée et ainsi nécessiter la saisie d'un paramètre pour générer le rapport.

Créez un rapport dynamique fondé sur la requête précédente.

Partie facultative (s'il vous reste du temps)

4. Liaisons entre formulaires et rapports

Il est possible d'ajouter aux formulaires et rapports des contrôles qui n'ont pas pour objectif de saisir des informations mais de déclencher une action. Ici par exemple nous allons nous intéresser à l'action qui consiste à passer d'un formulaire à un autre en cliquant sur un bouton.

Créez un nouveau formulaire en choisissant cette fois-ci l'option "Créer un formulaire en mode Ebauche...". Ajoutez-y 3 boutons pour (i) créez une nouvelle Agence, (ii) créez un nouveau ², (iii) voir la liste des agences. Mettez-le formulaire en forme pour ressembler à peu près à l'image ci-dessous. Pour cela, vous devrez éditer les propriétés des contrôles pour modifier notamment l'étiquette des boutons.

Interface_form

Les actions à effectuer suite à l'apparition d'un événement sur un contrôle sont regroupées dans des macros écrites dans un langage propre : OpenOffice Basic.

L'objectif de ce cours ne va pas jusqu'à la programmation en OpenOffice Basic, aussi nous vous donnons ici les portions de code à ajouter pour réaliser les actions souhaitées. Ouvrez le menu "Outils -> Macros -> Gérer les Macros -> OpenOffice.org Basic". Pour insérer un nouveau module de macros à la base, sélectionner le nom de votre fichier puis cliquez sur Nouveau. Une boîte de dialogue s'ouvre pour éditer ce module, pour le moment vide. Remplissez-le en copiant/collant les fonctions qui vous sont données ici : macro-TP-CSI-5.txt.

Macro

Vous allez vous servir des ces fonctions pour écrire une procédure permettant d'ouvrir le formulaire d'insertion d'Agence, réalisé en début de TP. Une telle procédure s'écrit :

Sub OuvrirNomFormulaire (pEvenement As Variant)
  OpenForm(pEvenement, "NomFormulaire")
End Sub

NomFormulaire doit être remplacé par le nom réel du formulaire à ouvrir. Pour ouvrir un rapport la syntaxe est similaire :

Sub OuvrirNomRapport (pEvenement As Variant)
  OpenReport(pEvenement, "NomRapport")
End Sub

Écrivez une procédure à la suite des fonctions fournies pour ouvrir votre formulaire d'insertion d'Agence.

Il ne reste plus qu'à associer cette procédure au bouton qui doit ouvrir ce formulaire. Ouvrez le formulaire contenant les 3 boutons en mode modification. Ouvrez la boîte de dialogue des propriétés du premier bouton et sélectionnez l'onglet Événements. En cliquant sur le bouton à droite de l'événement "Lors du déclenchement", associer la procédure que vous venez de créer à cet événement.

Vous pouvez maintenant sauvegardez le tout et vérifiez que le bouton fonctionne correctement. Terminez ce TP en créant les procédures permettant d'ouvrir le formulaire d'insertion d’Atelier et le rapport affichant la liste des agences et en les associant aux boutons concernés.

 

_________________________________________________________________________________________________________________________________________