[base] Affichage dans un formulaire

Bonjour,

j'ai une base de donnée, sous base, comportant plusieurs tables en relation. Je souhaite, dans un formulaire, obtenir une liste de choix déroulante, qui me permette d'affecter à l'enregistrement en cours un numéro de relation contenu dans la table de relation entre deux autres. Mais pour faciliter la saisie, je souhaite voir s'afficher le contenu d'un champ d'une des tables en relation. Je ne sais comment m'y prendre...

Pour faire bref :

J'ai

    une table de membres (id_membre, nom, prénom, adresse)
    une table d'enfants (id_enfant, nom, prénom)
    une table relation_membre_enfants (id_relation, id_membre, id_enfant)

et je souhaite réaliser un formulaire "enfants" où je pourrai inscrire les enfants (nom, prénom...) ainsi que leur attribuer le membre dont ils dépendent, en utilisant une liste de choix qui me ferait apparaître les noms des différents membres.

Si l'un d'entre vous peut me mettre sur la voie...

D'avance merci

Hugues

Bonjour,

j'ai une base de donnée, sous base, comportant plusieurs tables en relation. Je souhaite, dans un formulaire, obtenir une liste de choix déroulante, qui me permette d'affecter à l'enregistrement en cours un
numéro de relation contenu dans la table de relation entre deux autres.
Mais pour faciliter la saisie, je souhaite voir s'afficher le contenu d'un champ d'une des tables en relation. Je ne sais comment m'y prendre...

Pour faire bref :

J'ai

   une table de membres (id_membre, nom, prénom, adresse)
   une table d'enfants (id_enfant, nom, prénom)
   une table relation_membre_enfants (id_relation, id_membre, id_enfant)

et je souhaite réaliser un formulaire "enfants" où je pourrai inscrire les enfants (nom, prénom...) ainsi que leur attribuer le membre dont ils dépendent, en utilisant une liste de choix qui me ferait apparaître les noms des différents membres.

Si l'un d'entre vous peut me mettre sur la voie...

D'avance merci

Hugues

Bonjour,
Comme un parent peut avoir plusieurs enfants, je verrai plutôt un formulaire principal sur la table des membres
et un sous formulaire sur la table des enfants
J.M

Moi aussi :slight_smile:

Bernard

/Le 27/10/2011 10:54, Hugues Bousquet (Prof) a écrit :confused:

/Bonjour,

j'ai une base de donnée, sous base, comportant plusieurs tables en relation. Je souhaite, dans un formulaire, obtenir une liste de choix déroulante, qui me permette d'affecter à l'enregistrement en cours un numéro de relation contenu dans la table de relation entre deux autres. Mais pour faciliter la saisie, je souhaite voir s'afficher le contenu d'un champ d'une des tables en relation. Je ne sais comment m'y prendre...

Pour faire bref :

J'ai

   une table de membres (id_membre, nom, prénom, adresse)
   une table d'enfants (id_enfant, nom, prénom)
   une table relation_membre_enfants (id_relation, id_membre, id_enfant)

et je souhaite réaliser un formulaire "enfants" où je pourrai inscrire les enfants (nom, prénom...) ainsi que leur attribuer le membre dont ils dépendent, en utilisant une liste de choix qui me ferait apparaître les noms des différents membres.

Si l'un d'entre vous peut me mettre sur la voie...

D'avance merci

Hugues /

Bonjour,
Voici la solution :

Ajoute d'abord un champ "ref_membre" dans ta table enfant et créée la relation ad-hoc

Une fois ton formulaire enfants créé /(logiquement à partir de ta table enfants)/ tu crée, à l'intérieur de celle-ci un sous formulaire membres.
Voilà comment faire :

En mode édition
Ouvre le navigateur de formulaires par Affichage | Barre d'outils | Ébauche de formulaires
clique sur le bouton "Navigateur de formulaires" pour l'afficher
Bouton droit sur MainForm /(en haut de liste)/, puis Nouveau | formulaire
Le sous-formulaire qui vient de se créer est sélectionné, en bas de liste. Profites-en pour le renommer "sf_membres", par exemple
Bouton droit sur le sous-formulaire puis Propriétés
Dans la boîte qui s'affiche : onglet "Données"
Dans le champ "contenu" choisis la table membres
Dans le champ "Lier les champs maîtres" choisis les champ de la relation qui existe entre les deux tables "enfants" et "membres" /(normalement ref_enfant et id_membre)
/Enfin affiche les contrôles de formulaires par Affichage | Barre d'outils
Choisis zone de liste et crée ce champ dans ton formulaire
Clic droit sur ce nouveau champ | Contrôle... et onglet "Données" dans la boîte qui s'affiche
Dans le champ "champ de données" choisis nom (parmi les champs de la table membre qui doivent y figurer)
Dans le champ "Type du contenu de liste" choisis Sql
Dans le champ contenu de liste tapes : SELECT `nom`, Id_membre FROM `tabase`.`ta_table_membres` ORDER BY `nom` ASC

Et si ça marche, SURTOUT, ne me demande pas pourquoi...
Cordialement. Lucien.

Bonjour

Hugues Bousquet wrote:

et je souhaite réaliser un formulaire "enfants" où je pourrai inscrire
les enfants (nom, prénom...) ainsi que leur attribuer le membre dont ils
dépendent, en utilisant une liste de choix qui me ferait apparaître les
noms des différents membres.

C'est tout à fait possible (sans ajouter de champ...).

Un enfant pouvant "dépendre" de plusieurs membres la saisie de ces derniers
serait plus "agréable" dans un contrôle table, ce qui n'empêche pas la
saisie en liste déroulante.

Ci-joint un exemple :

http://nabble.documentfoundation.org/file/n3457674/Membres.odb Membres.odb

Cordialement
Pierre-Yves

/Le 27/10/2011 15:35, pierre-yves samyn a écrit :confused:

//
/
C'est tout à fait possible (sans ajouter de champ...).

Un enfant pouvant "dépendre" de plusieurs membres la saisie de ces derniers
serait plus "agréable" dans un contrôle table, ce qui n'empêche pas la
saisie en liste déroulante.

Ci-joint un exemple :

http://nabble.documentfoundation.org/file/n3457674/Membres.odb Membres.odb

Cordialement
Pierre-Yves
/

Merci pour l'exemple, encore faut-il pouvoir l'ouvrir :
moi j'ai pas pu

Bonjour à tous,

Merci pour l'exemple, encore faut-il pouvoir l'ouvrir :
moi j'ai pas pu

Chez moi, sous Mac OSX avec LO 3.4.3, ça marche sans problème.

Alex

moi non plus
LO 3.4.3 Fedora14
Impossible d'établir la connexion à la source de données "Membres".

Statut SQL: S1000
Code d'erreur: -40

General error: org.hsqldb.lib.FileSystemRuntimeException: java.io.IOException:
/home/tinderbox/libreoffice/clone/components/package/source/xstor/xstorage.cxx:3169;

Gérard

moi non plus
LO 3.4.3 Fedora14
Impossible d'établir la connexion à la source de données "Membres".

Il fait enregistrer le fichier sur le disque dur avant de pouvoir l'ouvrir.
J.M

c'est bien ce que j'ai fait
Gérard

Bonjour

Lucien RUBEMPRE wrote:

Merci pour l'exemple, encore faut-il pouvoir l'ouvrir

J'ai testé de le recharger depuis :
- un pc windows xp pro & Libo 3.3.3
- un pc windows xp & Libo 3.4.3
- un pc windows 7 64bit & Libo 3.4.3

Aucun problème...

Alex confirme le fonctionnement sous Mac OSX avec LO 3.4.3
Indirectement Jean-Michel me semble confirmer également le fonctionnement,
sans préciser l'environnement.

Gérard confirme le nom fonctionnement sous LO 3.4.3 Fedora14
Lucien ne précise pas son environnement...

Peut-être un bug spécifique linux (sous réserve de précision de Lucien) ?
Utilisez-vous la version "officielle" ou une version "packagée" ?

Cordialement
Pierre-Yves

Et le cas ou un enfant peut avoir plusieurs parents ...non c'est pas bon:-\
Ceci étant la solution préconisée par Jean-Michel , Alex et les autres fonctionne. Je peux proposer à Hugues, si toutefois ça l'intéresse un exemple de gestion de bibliothèque: Pour un auteur plusieurs ouvrages, relation de 1 à n
A+

Claude

/Le 28/10/2011 10:46, pierre-yves samyn a écrit :confused:

/Bonjour

Lucien RUBEMPRE wrote:
/

/
Merci pour l'exemple, encore faut-il pouvoir l'ouvrir

/

/
J'ai testé de le recharger depuis :
- un pc windows xp pro& Libo 3.3.3
- un pc windows xp& Libo 3.4.3
- un pc windows 7 64bit& Libo 3.4.3

Aucun problème...

Alex confirme le fonctionnement sous Mac OSX avec LO 3.4.3
Indirectement Jean-Michel me semble confirmer également le fonctionnement,
sans préciser l'environnement.

Gérard confirme le nom fonctionnement sous LO 3.4.3 Fedora14
Lucien ne précise pas son environnement...

Peut-être un bug spécifique linux (sous réserve de précision de Lucien) ?
Utilisez-vous la version "officielle" ou une version "packagée" ?

Cordialement
Pierre-Yves

--
View this message in context:http://nabble.documentfoundation.org/base-Affichage-dans-un-formulaire-tp3457087p3460390.html
Sent from the Users mailing list archive at Nabble.com.
/

Pardon, j'étais distrait.
En fait le complément d'explication de Jean-Michel PIERRE m'a permis d'accéder au fichier.
La seule chose est que la solution proposée semble encore imparfaite, surtout quand on fait défiler les enregistrements en avant et en arrière.

Ma solution me paraît plus robuste. En effet, quand on utilise un sous-formulaire sous forme de liste déroulante, mieux vaut enrichir séparément la table dont il provient.
Je m'explique :
La table que j'utilise principalement est enfants. Quand j'inscris un enfant, si le membre dont il dépend est déjà inscrit : je le sélectionne dans la liste.
Par contre, pour ajouter un nouveau membre à cette liste : je dois ouvrir séparément la table membres pour l'y ajouter.
Pour qu'il apparaisse ensuite, sur la liste de la table enfant, il faut fermer cette dernière et la rouvrir.

Cette obligation de fermer et rouvrir la table pour la mise à jour du sous-formulaire peut faire partie des améliorations à proposer pour une version ultérieure.

Je n'ai pas du tout regardé de près le problème général que tu soumets à la liste mais pour ce dernier souci, est-ce que "actualiser le contrôle" ne suffit pas en lieu et place de la réouverture de la table enfants ?

Bernard

Bonjour

Lucien RUBEMPRE wrote:
> Merci pour l'exemple, encore faut-il pouvoir l'ouvrir

J'ai testé de le recharger depuis :
- un pc windows xp pro & Libo 3.3.3
- un pc windows xp & Libo 3.4.3
- un pc windows 7 64bit & Libo 3.4.3

Aucun problème...

Alex confirme le fonctionnement sous Mac OSX avec LO 3.4.3
Indirectement Jean-Michel me semble confirmer également le fonctionnement,
sans préciser l'environnement.

Gérard confirme le nom fonctionnement sous LO 3.4.3 Fedora14
Lucien ne précise pas son environnement...

Peut-être un bug spécifique linux (sous réserve de précision de Lucien) ?
Utilisez-vous la version "officielle" ou une version "packagée" ?

version officielle, je viens de retester et j'ai le même résultat. J'essairai
plus tard F15 pour voir

Cordialement
Pierre-Yves

Gérard

J'ai créé le formulaire "enfants" avec une colonne "parent" http://www.cijoint.fr/cjlink.php?file=cj201110/cijqZvilbw.odb

  Si tu ajoutes un membre dans la table membres, dans le formulaire tu sélectionnes la zone de liste dans la colonne "parent" et tu cliques sur "Rafraîchir le contrôle" : le(s) membre(s) créé(s) dans la table "membres" apparaît(aissent) dans la liste déroulante.

Bernard

http://www.cijoint.fr/cjlink.php?file=cj201110/cijqZvilbw.odb

Bonjour Claude,

Et le cas ou un enfant peut avoir plusieurs parents

On va émettre l'hypothèse qu'il n'en a pas plus de deux :-). Dans ce cas on peut "dénormaliser" la relation et prévoir 2 champs (id_parent1 et id_parent2) dans la table "enfants".

Bernard

Bonjour,

Il serait peut-être prévoyant de laisser la possibilité d'un 3° et 4° parent en cas de famille recomposée

Cordialement,
Sandy-Pascal Andriant

/Le 28/10/2011 13:42, Bernard Ribot a écrit :confused:

/Je n'ai pas du tout regardé de près le problème général que tu soumets à la liste mais pour ce dernier souci, est-ce que "actualiser le contrôle" ne suffit pas en lieu et place de la réouverture de la table enfants ?

Bernard /

Chez moi le rechargement (Fichier | Recharger) provoque un message d'erreur : http://www.cijoint.fr/cjlink.php?file=cj201110/cij9OPYz7R.jpg

Ah oui, ma configuration :

/Le 28/10/2011 13:42, Bernard Ribot a écrit :confused:

/Je n'ai pas du tout regardé de près le problème général que tu soumets à la liste mais pour ce dernier souci, est-ce que "actualiser le contrôle" ne suffit pas en lieu et place de la réouverture de la table enfants ?

Bernard /

Oups,
je n’utilisais pas le bon bouton. Il fallait prendre le bouton "Actualiser" de la barre d'outils "Contrôles de formulaire". Là ça fonctionne.
Par contre, notez bien le numéro de votre enregistrement. Car si vous en avez plus de 10.000 (comme moi), ça vous ramène au début de la table.