Bonjour tout le monde et bonne année 2025 !
Je suis en train de m'amuser avec une petite base de données
personnelle. J'utilise LO 24.8.4 ainsi que firebird comme base intégrée
(pour tester).
Toujours pour le fun, ma base de données permet de gérer une petite
bibliothèque (des bouquins, des auteurs). J'ai créé quelques formulaires
simples pour remplir ma BD (pour l'instant, je dois avoir dix bouquins
au maximum et à peu près le même nombre d'auteurs. C'est donc juste pour
voir comment tout fonctionne, comment je peux améliorer les choses, etc.).
Dans un de mes formulaires, je souhaite créer (ou modifier) un livre. Et
je veux pouvoir associer un ou plusieurs auteurs au livre. SQL ne me
pose aucun problème de ce côté.
Pour le problème qui me tracasse, j'ai une table pour mes bouquins (avec
clé primaire, titre, et autres infos pas importantes pour mon problème),
une table d'auteurs (clé primaire, nom, prénom, et autres trucs), et
enfin une table associant la table des livres avec celles des auteurs
(deux champs: une clé étrangère vers la table des livres, une clé
étrangère vers la table des auteurs, les deux champs formant la clé
primaire de la table d'association). Je peux ainsi avoir un auteur avec
plein de romans à son actif, ou bien un bien un roman avec, si
nécessaire, plusieurs auteurs, et puis bien sûr le truc trivial: un
livre un auteur.
Lors d'une première version de mon formulaire, pour pouvoir associer un
auteur au livre, j'utilise une liste déroulante qui affiche le contenu
de la table des auteurs (y en a pas beaucoup, ne l'oublions pas). Cela,
je sais faire.
Et je me suis posé la question: le jour où j'aurais beaucoup d'auteurs
dans ma BD, ça va moins le faire. Je me suis dit: pourquoi ne pas
afficher une liste d'auteurs dans une table (avec une requête sql qui va
bien), puis sélectionner l'auteur désiré dans cette table et l'associer
au bouquin.
J'ai donc écrit une macro basic pour faire ça. Et ça marche. Je clique
sur une ligne de la table, et je suis capable de récupérer la clé
primaire de cet auteur. Puis j'essaie d'injecter cette valeur dans la
partie clé étrangère de la table association (ce que faisait très bien
la liste déroulante). Pour visualiser ce que je fais, j'ai un contrôle
numérique qui correspond à la partie clé étrangère vers auteurs.
C'est l'injection qui pose problème: le formulaire ne considère pas
cette injection comme une modification. Donc impossible d'enregistrer le
nouveau tuple de la table association. En revanche, si je saisis à la
main dans le champ numérique, le formulaire accepte la donnée.
J'en déduis qu'en cliquant dans un contrôle (ici un contrôle numérique),
un évènement est remonté au formulaire. Il faudrait donc que je simule
ceci par basic, et là, je bloque. Quelles méthodes doit-on utiliser sur
les objets "contrôles" pour que cela se comporte comme si on faisait une
saisie souris-clavier?
Si quelqu'un a une solution, je suis preneur.
Merci d'avance
Michel
--
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour vous désinscrire
Les archives de la liste sont disponibles à https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy
Context
- [fr-users] [BASE] macros dans formulaires · Michel Gardie
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.