Créer et gérer une base de données avec OOo Base

, par Patrice HARDOUIN

Les exemples de cet article sont tirés du projet "GeMaTP OOo Base".

Comme il ne sert à rien de vouloir réinventer la roue nous nous baserons sur un tutoriel officiel de la Documentation du site fr.openoffice.org. Ce tutoriel très bien fait sera simplement augmenté d’informations permettant d’aller un peu plus loin avec OOo Base.

Tutoriel "Débuter avec Base"
Ce tutoriel a été écrit pour OOo 2 mais s’utilise sans modification sous OOo 3 (dernière version à la date de rédaction de cet article).

Création des tables

voir pages 1 à 11 du tutoriel "Débuter avec Base"

Récupérer le fichier du "GeMaTP OOo Base" et aller jeter un œil dans Outils/Relations pour afficher les tables créées pour ce projet :
Présentation graphique des tables et de leurs relations

Création d’un formulaire de saisie/modification des données

voir pages 11 à 19 du tutoriel "Débuter avec Base"

Dans la procédure de création d’un "formulaire simple" (page 13), nous choisissons d’utiliser la fonction "sous-formulaire".

Voici toute la procédure en images...

Sélection des champs que l’on souhaite afficher de la première table :
Sélection de la première table
Sélection de la seconde table :
Choix de la seconde table pour le sous-formulaire
Sélection des champs que l’on souhaite afficher de la seconde table :
Sélection des champs pour le sous-formulaire
Choix de l’affichage :
Choix de l'affichage
Possibilités de modifications/verrouillages du formulaire :
Possibilités de modifications/verrouillages du formulaire
Choix du design du formulaire :
Choix du design du formulaire
Nommage du formulaire :
Nommage du formulaire
Le formulaire en mode Conception :
Le formulaire en mode Conception

Nous avons donc maintenant un formulaire brut d’ores et déjà utilisable mais dont nous pouvons améliorer l’ergonomie pour en faciliter l’utilisation quotidienne (je dois bien avouer que le but est de faire utiliser cette application par des élèves de section professionnelle qui ne sont pas forcément férus de manipulations informatiques).

Amélioration de l’ergonomie (affichage) du formulaire

Affichage du formulaire principal

Nous allons modifier l’affichage du formulaire principal pour qu’il soit plus explicite.

Pour cela nous utilisons le "Navigateur de Formulaires" accessible directement depuis un bouton de la barre d’outils "Ébauche de formulaire" (si cette barre d’outils n’est pas affichée, il suffit de valider son affichage dans Affichage / Barre d’outils).

Navigateur de formulaires

Nous voyons bien que nous avons 2 formulaire (MainForm et SubForm). Nous allons supprimer les étiquettes des 2 champs du MainForm (supprimer simplement "lblcaracteristiques_lieu_stock" et "lblnom_lieu_stock" du Navigateur de formulaires).

Nous pouvons maintenant placer nos 2 champs comme on le souhaite en haut de notre page et ajouter un titre au formulaire avec l’outil "Champ d’étiquette" de la barre d’outils "Contrôles de formulaire".

Formulaire avec son titre en cours de mise en place

Puis nous utilisons conjointement le "Navigateur de Formulaires" et l’outil de "Contrôle" (accessible avec le bouton "Contrôle" de la barre d’outils "Contrôles de formulaire") pour mettre en page les autres champs de notre formulaire principal (MainForm) :

Mise en page du titre du formulaire

Nous visualisons le résultat avec le bouton "(Dés)activer le mode conception" de la barre d’outils "Contrôles de formulaire" :
Visualisation du formulaire

Ajouter des boutons pour naviguer entre les enregistrements

L’affichage de notre formulaire est simple : nous avons, sur une seule page, le contenu d’un lieu de stock. Si on passe à l’enregistrement suivant (à l’aide de la barre de navigation située tout en bas de notre fenêtre) nous visualisons le contenu d’un autre lieu de stock et ainsi de suite.

L’emplacement de la barre de navigation (perdue dans les autres éventuelles barres d’outils) ne facilite pas la prise en main du formulaire par les élèves. De plus, cette barre d’outil s’inactive si on se trouve dans le sous-formulaire (pour saisir ou modifier le stock).

Nous allons donc placer un bouton de navigation juste à côté du champ présentant le nom du lieu de stock. Pour cela, nous ouvrons les "Autres contrôles" et choisissons "Barre de navigation" que nous paramétrons ("Contrôle") pour n’afficher que la "Navigation" (on masque les autres affichages de la barre de navigation comme illustré sur la capture d’écran suivante) :

Ajout d'une barre de navigation dans le formulaire

Nous pouvons maintenant supprimer de l’affichage la première barre de navigation qui ferait alors double-emploi. De plus, la barre de navigation du sous-formulaire (située juste sous le tableau du sous-formulaire) ne sert strictement à rien nous allons également la supprimer de l’affichage :

Supprimer l'affichage de la barre de navigation native

Lier un champ à une liste de données

voir pages 17 à 22 du tutoriel "Débuter avec Base"

La méthode utilisée ici pour modifier le formulaire est très intéressante et montre comment récupérer et adapter des codes de fonctions ou macros (en OOo Basic) générés automatiquement par les Assistants de OOo Base et les réinjecter là où on souhaite même sans comprendre un traitre mot en OOo Basic.

Lors de la saisie dans le sous-formulaire on se rend compte qu’il serait bien plus utile d’avoir une liste déroulante plutôt que de devoir saisir "n" fois la même information. C’est notamment le cas de la colonne "unité".

Nous transformons notre colonne en "Zone de liste" (clic droit sur l’en-tête "unité" et "Transformer en... Zone de liste").

Transformer en "zone de liste"

Mais nous devons dire où et comment aller chercher les mots de cette liste (il faut les récupérer dans la table "GeMaTP_Unites").

Nous allons utiliser la méthode expliquée dans le tutoriel "Débuter avec Base" pour créer une liste déroulante ailleurs dans notre formulaire :
Choix de la table qui contient les items de liste
choix du champ qui contient les items de liste
Sélectionner les champs à mettre en relation

Puis nous récupérons le code de notre nouvelle liste déroulante :
La requête SQL permettant d'alimenter la zone de liste

et corrigeons notre liste déroulante dans le tableau (SubForm) :
Adapter la zone de liste du tableau avec notre nouveau code importé de l'Assistant

On vérifie le fonctionnement en désactivant le mode conception de formulaire :

Zone de liste fonctionnelle

On peut alors supprimer la liste déroulante inutile générée juste pour récupérer le bout de code nécessaire à l’accès aux données de la table "GeMaTP_Unites".

Requête et Rapport

voir pages 22 à 25 du tutoriel "Débuter avec Base"

Ce qui nous intéresse c’est de pouvoir imprimer (sur papier ou archiver en PDF) des états des lieux de notre Inventaire. Ce qui serait bien c’est que tout l’inventaire soit regroupé sur une ou plusieurs pages en enfilade afin de gaspiller le moins de papier possible et de générer des documents synthétiques.

Nous allons créer une requête qui nous affichera les lieux de stocks les une en dessous des autres et leur contenu respectif (en suivant le tutoriel "Débuter avec Base") :

Résultat de la requête sur la base

Ce résultat sous forme de tableau n’est pas vraiment aisé à lire et à utiliser. Nous allons donc générer un rapport basé sur cette requête. Nous utiliserons l’Assistant de création de rapport afin d’arriver à ce résultat (c’est tellement simple en suivant l’assistant et une fois que la requête existe que cela se passe de tout commentaire) :

Le rapport basé sur la requête vue précédemment

Ajouter un bouton pour afficher le rapport depuis le formulaire

Il peut être intéressant d’ajouter un bouton "imprimer l’inventaire" directement dans le formulaire de saisie/modification de l’inventaire.

La marche à suivre pour ce type de fonctionnalité dépasse l’objectif de ce tutoriel. En cas de difficultés il est recommandé de s’orienter vers les ressources documentaires citées en liens tout en bas de cet article

La marche à suivre est expliquée sur le forum d’OpenOffice.org.

Voici la macro-commande qu’il faudrait lier à un bouton dans le formulaire :

Function OpenForm( formContainer as variant, oConnection as variant, sFormName as string, optional strMode as string ) as variant
Dim aProp(1) As New com.sun.star.beans.PropertyValue
dim openMode as string
  if ismissing( strMode ) then
     openMode = "open"
  else
     openMode = strMode
     endif
   aProp(0).Name = "ActiveConnection"
   aProp(0).Value = oConnection
   aProp(1).Name = "OpenMode"
   aProp(1).Value = strMode
   OpenForm = formContainer.loadComponentFromURL(sFormName,"_blank",0,aProp())
End Function
REM  *****  BASIC  *****

' ouverture des formulaires et rapports
' se fait par appel d'une fonction
Sub onClickOuvrirF_SAISIE( oEvent as variant )
  OpenForm( OEvent.Source.Model.Parent.ActiveConnection.Parent.DatabaseDocument.FormDocuments, OEvent.Source.Model.Parent.ActiveConnection, "F_SAISIE")
End Sub

Sub onClickOuvrirListe_inventaire( oEvent as variant )
  OpenForm( OEvent.Source.Model.Parent.ActiveConnection.Parent.DatabaseDocument.ReportDocuments, OEvent.Source.Model.Parent.ActiveConnection, "Liste_inventaire")
End Sub