Créer et gérer une base de données avec OOo Base
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.
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 :
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 seconde table :
Sélection des champs que l’on souhaite afficher de la seconde table :
Choix de l’affichage :
Possibilités de modifications/verrouillages du formulaire :
Choix du design du formulaire :
Nommage du formulaire :
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).
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".
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) :
Nous visualisons le résultat avec le bouton "(Dés)activer le mode conception" de la barre d’outils "Contrôles de 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) :
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 :
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").
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 :
Puis nous récupérons le code de notre nouvelle liste déroulante :
et corrigeons notre liste déroulante dans le tableau (SubForm) :
On vérifie le fonctionnement en désactivant le mode conception de formulaire :
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") :
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) :
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