Il ne faut pas confondre deux choses :
- Quand un enregistrement est sélectionné, disposer de listes pour modifier la valeur d'un des champs. Par exemple, pour une facture, pouvoir choisir dans la liste des clients. Il va de soi que ce faisant on ne souhaite pas changer de facture...
- Rechercher, choisir, sélectionner un enregistrement (une facture, un client, un contrebassiste, etc.), par exemple d'après son nom. Après cette opération l'enregistrement courant change : ce n'est plus systématiquement le premier saisi mais celui trouvé qui est affiché, prêt pour la consultation ou la modification.
La plupart du temps on utilise pour cela une requête paramétrée. Or l'utilisation de paramètres dans une requête est assez frustrante car on ne maîtrise pas la présentation de leur saisie : OOo affiche une simple zone de saisie dans un dialogue.
L'objet de ce fil est de présenter quelques techniques permettant de recourir à des listes déroulantes affichant les valeurs possibles pour les paramètres.
OOoBase ne permet pas, à ce jour, de faire référence dans une requête à un contrôle de formulaire (comme le permet Access notamment).
En revanche il est bien sûr possible de faire l'inverse : fonder un formulaire sur une requête. Le problème est alors de "lier" la sélection faite dans une liste avec l'affichage du formulaire.
La première technique abordée est la plus simple en ce qu'elle n'utilise aucune macro : elle est fondée sur la mise en oeuvre d'un sous-formulaire.
Nous désirons obtenir :
Dans cet exemple la liste affiche la liste des prénoms figurant dans la table. Après sélection de l'un d'entre eux, le clic sur le bouton doit rafraîchir le contrôle Table de manière à n'afficher que les enregistrements concernés.
Le "truc" est d'utiliser une table "supplémentaire" qui ne servira que pour la sélection. Dans l'exemple je l'ai donc nommée... Sélection.
Elle ne contient que deux champs :
- ID_Sélection (Integer - clé primaire)
- Sélection (Texte VARCHAR_IGNORECASE)
Fonder le formulaire principal (MainForm dans l'exemple) sur cette table Sélection
La liste déroulante sera liée au champ Sélection ; Type de contenu : SQL ; Contenu :
Code : Tout sélectionner
SELECT DISTINCT "Prénom" FROM "Personnes" AS "Personnes"
- Le mot clé DISTINCT signifie que la liste n'affichera qu'une seule occurrence par prénom (i.e. elle n'affichera qu'une seule fois Raoul même si plusieurs enregistrements ont ce prénom).
- Nous ne souhaitons pas saisir dans la table "Sélection", qui n'est là que pour pouvoir lier les données du sous-formulaire sur le critère de sélection. Le formulaire principal limite donc la saisie :
- Autoriser les ajouts : non
- Autoriser les modifications : oui
- Autoriser les suppressions : non
- N'ajouter que des données : non
Le sous-formulaire Standard est lié au formulaire principal sur les champs Sélection (du formulaire principal, autrement dit la liste déroulante) et Prénom (du sous-formulaire).
Le bouton Actualiser a comme propriété Action : Rafraîchir le formulaire