[Résolu] Champ alimenté depuis une liste d'une autre table

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

[Résolu] Champ alimenté depuis une liste d'une autre table

Message par martinterrier »

Bonjour,

Dans la base de données jointe, je rencontre une difficulté.

- Le coeur de ma BDD est la table "1_Base_Donnee_PV". Pour remplir cette base qui est très longue, j'ai réparti mes champs en "étapes" qui chacune aura son formulaire dédié (ici, la première étape est le formulaire "1_enregistrement".

- J'ai établi une relation entre ma table principale et la table "ETAT_CIVIl_M" via les champs "NUMERO_MAR" et "NUMERo_M" qui sont un même numéro.

Dans mon premier formulaire, "1_Enregistrement", je souhaiterais que le champ "NUMERO_MAR" soit alimenté, via une liste, par les données contenues dans le champ "NUMERO_M de la table "ETAT_CIVIL_M", de telle sorte qu'il n'y ait qu' à sélectionner ce numéro.

J'ai bien tenté de le faire en transformant le champ adéquat en zone de liste puis en utilisant une instructioN SQL qui va sélectionner le bon champ, mais ma liste reste vide et j'obtiens, à l'ouverture, un message d'erreur : Impossible de déterminer le contenu de la zone combinée/zone de liste. (COLUMN NOT FOUND). C'est la même chose pour le champ unité.

Je n'arrive pas à comprendre mon erreur.

Merci par avance.
Pièces jointes
SUIVI_Forum.odb
(16.98 Kio) Téléchargé 102 fois
Dernière modification par martinterrier le 30 avr. 2021 09:28, modifié 1 fois.
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmimi »

Bonjour,
Si ce qui est attendu est ceci :
Zone de liste NUMERO_MAR.jpg
il faut passer le nombre de champ lié à 0 :
Champ lié 0.jpg
Pièces jointes
SUIVI_Forum_v2.odb
(26.54 Kio) Téléchargé 101 fois
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Merci, c'est bien cela en effet.

Pouvez-vous m'expliquer à quoi correspond cette fonction "champ lié"? Et dans quels cas elle pourrait être utilisée?
Cette question afin de bien cerner l'utilisation du logiciel et mieux comprendre mes erreurs.

Bien à vous
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmimi »

Si la Table ETAT_CIVIl_M avait un ID de Type INTEGER en AutoValeur en plus de son champ actuel NUMERo_M, dans le formulaire qui alimente 1_Base_Donnee_PV, vous pourriez afficher le Numéro qui vous intéresse mais ne stocker que l'ID.
Résultat : au lieu de stocker deux fois dans deux Tables différentes les mêmes valeurs NUMERo_M et NUMERO_MAR, vous n'auriez dans la Table 1_Base_Donnee_PV que le seul ID du Champ lié valeur 1.
D'où un gain de légèreté de la Base.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Merci encore, mais je ne parviens pas à comprendre comment ce que vous m'indiquez.

Si je comprends bien, vous ne faites des liens que de ID à ID entre vos tables?

Dans ce cas, comment est-ce que la jonction entre deux champs, certes de même format / valeur, se fait-elle?

Est-ce justement le rôle du "Champ lié", qui fait, au sein d'une table, le lien entre un champ clé primaire et les autres champs de la table ?

En fait, je n'arrive pas à saisir "intellectuellement" le fonctionnement de cette

Par ailleurs, je n'arrive pas à effectuer l'opération de création de ID en tant que clé primaire selon vos conseils : j'obtiens systématiquement "Column constraints are not acceptable in statement [ALTER TABLE "ETAT_CIVIL_M" ADD "ID" INTEGER NOT NULL IDENTITY]" quand je crée le champ "ID" et que je lui attribue la fonction de clé primaire.

Merci et désolé de ma compréhension laborieuse...
Pièces jointes
SUIVI_Forum.odb
(18.06 Kio) Téléchargé 93 fois
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmimi »

martinterrier a écrit :Est-ce justement le rôle du "Champ lié", qui fait, au sein d'une table, le lien entre un champ clé primaire et les autres champs de la table ?
Dans l'exemple joint, la Table T_PV n’affiche que les ID_ETAT_CIVIL alors que le formulaire FORM_T_PV affiche le Nom et le Prénom dans la Zone de liste où NOM et PRÉNOM ont été concaténés et la valeur du Champ lié est 1
Il restera ensuite à faire une requête avec les deux Tables T_PV et T_ETAT_CIVIL pour avoir l'affichage complet des éléments du PV et de l’État civil (voir Requête1)

Lors d'une création des noms des champs dans les Tables, pour faire plus simple, il vaut mieux éviter les espaces et les caractères accentués.
Pièces jointes
SUIVI_Forum_Liens_ID.odb
(26.45 Kio) Téléchargé 98 fois
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Alimenter un champ depuis une liste d'une autre table

Message par Dude »

Salut,
martinterrier a écrit :j'ai réparti mes champs en "étapes" qui chacune aura son formulaire dédié
J'entrevois une erreur de conception :
Capture.jpg
Il y a de la redondance d'informations.
Pour moi, les étapes doivent faire l'objet d'une table dédiée et une relation 1-n.
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Bonjour Dude,

Je ne crois pas m'être trompé : toutes ces informations sont bien liées à une seule et même entrée. Quand je dis que je les ai réparties, c'est dans mon tableur excel quand je réfléchissais à ma table (concrètement, j'ai divisé toutes ma ligne de nom de champs par couleurs : une couleur = un formulaire). Par contre, l'ensemble des champs entourés sera bien alimenté par une table distincte (mais qui n'aura que vocation à remplir des champs de liste; pas à être lié à la table).

Une précision qui éclairera peut-être ma démarche : j'exploiterai ensuite cette table à deux fins 1) Statistique : tirer toutes les infos possibles via un tableau croisé dynamique libre calc 2) Production "automatisée" de docs via libre writer (ne maitrisant pas "Rapport", je ne sais dire s'il faut privilégier l'un ou l'autre aspect).

Mais peut-être qu'encore une fois est-ce la logique de la base de données que je ne comprends pas et que donc je n'exploite pas bien.

Bien cordialement!
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Alimenter un champ depuis une liste d'une autre table

Message par Dude »

martinterrier a écrit :Je ne crois pas m'être trompé
C'est toi qui voit.
martinterrier a écrit :Quand je dis que je les ai réparties, c'est dans mon tableur excel
Sauf qu'un tableur (même propriétaire) n'est pas une base de données.
Dès lors que tes relations sont correctes, une requête ramène les informations même réparties sur plusieurs tables.

Bon courage
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Désolé pour ma formulation "je ne crois pas m'être trompé" -> je voulais dire que, puisque tous ces champs se ramènent à une seule entrée (un unique dossier), il me paraissait cohérent de les laisser dans une seule table. La logique d'une base de donnée (ou sa fiabilité) veut-elle qu'il faille "minimiser" le nombre de champs dans une unique table et qu'il vaille mieux répartir les données sur plusieurs tables?
Cela fait une semaine que je m'intéresse à Base et j'ai tout à fait le sentiment de ne pas en maitriser la philosophie. Je cherche donc vraiment à la comprendre à chaque fois que je pose une question, pour produire une base de donnée performante (celle que je fais) et pour toutes les autres par la suite (l'outil me parait vraiment performant, même si je suis encore loin de pouvoir l'exploiter!).

Enfin, je ne me suis servi du tableur excel que comme base de travail, aucunement dans l'idée d'une exploitation (comme d'un brouillon, en somme, sur lequel j'ai mis des couleurs pour déterminer l'étendue de mes formulaires).

Merci et bon après-midi!
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmimi »

martinterrier a écrit : il me paraissait cohérent de les laisser dans une seule table
C'est vrai que c'est cohérent lorsqu’on utilise un Tableur puisqu'il n'y a pas d'autre façon de faire.
Dans la Base de données, on peut au contraire avoir une Table avec les données à détailler, cette Table étant en relation avec la Table principale 1_Base_Donnee_PV. L'affichage dans le formulaire aura alors cet aspect :
Une Table supplémentaire, en relation avec l'ID_PV, permet d'afficher les détails des PV et remplace ainsi les champs NATIF_TJ 1,2,3 etc de la Table 1_Base_Donnee_PV
Une Table supplémentaire, en relation avec l'ID_PV, permet d'afficher les détails des PV et remplace ainsi les champs NATIF_TJ 1,2,3 etc de la Table 1_Base_Donnee_PV
Pièces jointes
SUIVI_Forum_v4.odb
Ce qui a été fait pour les Codes NATIF_TJ peut aussi s'appliquer aux amendes
(45.35 Kio) Téléchargé 92 fois
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Je comprends cette manière de faire. mon besoin (que j'aurais certainement du préciser en amont) est cependant également de joindre un champ libellé à chaque NATINF (cf l'ajout dans la table T_CODE_NATINF_TJ).

Ainsi, dans l'option que vous proposez, que faudrait-il faire pour que, en renseignant uniquement le numéro de NATINF, l'information de libellé soit également "appelée" et associée au code renseigné?

Ce besoin d'un libellé est motivé à la fois par une compréhension aisé de ce à quoi se rapporte le NATINF 'lorsque l'on consulte la base de données), mais également pour du publipostage ultérieur (que le libellé puisse figurer sur un courrier).

Bien à vous!
Pièces jointes
SUIVI_Forum_v4.odb
(45.52 Kio) Téléchargé 91 fois
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmimi »

martinterrier a écrit :Ainsi, dans l'option que vous proposez, que faudrait-il faire pour que, en renseignant uniquement le numéro de NATINF, l'information de libellé soit également "appelée" et associée au code renseigné?
Si le libellé est un commentaire libre, il faut ajouter un champ dans la Table et une colonne dans le contrôle.
Pièces jointes
Libellés libres.jpg
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Non, il s'agit justement d'un libellé fixe : 1 code NATINF = 1 libellé.
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmimi »

Apparemment, pour un PV, il peut y en avoir plusieurs.
Est-ce le cas ?
Est-il possible d'avoir des exemplums de codes et de libellés ?
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Un exemple de code NATINF :

N° NATINF:
379

Libellé:
Qualification OUTRAGE A AGENT DE CONTROLE DE L'INSPECTION DU TRAVAIL
Définie par ART.433-5 AL.2 du code pénal. ART.L.8114-2 du code du travail.
Réprimée par ART.433-5 AL.2, ART.433-22 du code pénal. ART.L.8114-2 du code du travail.

Et effectivement, un PV peut comporter 1, 2, 5 NATINF différents. Mais le libellé d'1 NATINF ne varie jamais.

Automatiser la sélection des NATINF et de leur libellé, comme exposé avant, est donc important pour la fiabilité + consultation / publipostage ultérieur (comme je l'indiquais auparavant).

Merci encore!
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmimi »

Si les libellés sont fixes, il faut donc remplir les codes et les libellés dans la Table, mais dans le formulaire, la sélection du code se fera dans un colonne Zone de liste du SousFormulaire ; il ne sera pas nécessaire d’afficher le libellé dans le formulaire.
Choix Code.jpg
Choix Code.jpg (16.12 Kio) Consulté 2424 fois
Pour le publipostage, ou le Rapport, les libellés seront récupérés dans une requête.
Aperçu Requête.jpg
Pièces jointes
SUIVI_Forum_v5.odb
(47.45 Kio) Téléchargé 98 fois
Dernière modification par jeanmimi le 28 avr. 2021 18:54, modifié 2 fois.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

jeanmimi a écrit :Si les libellés sont fixes, il faut donc remplir les codes et les libellés dans la Table, mais dans le formulaire, la sélection du code se fera dans un colonne Zone de liste du SousFormulaire ; il ne sera pas nécessaire d’afficher le libellé dans le formulaire.
-> Dans quelle table remplir codes et libellés? La table Natinf?

Désolé mais je ne vois pas... si vous aviez encore une fois l'amabilité de me fournir la base en pj renseignée avec un exemple, ce serait parfait pour moi.

Bien à vous.
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: Alimenter un champ depuis une liste d'une autre table

Message par jeanmi2403 »

Bonjour,
Ca ressemble assez à un autre sujet, PV pour une garde à vue (que je n'ai pas retrouvé) ou bien à une utilisation d'autotextes ?
Cordialement,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 19:28

Re: Alimenter un champ depuis une liste d'une autre table

Message par martinterrier »

Merci à tous pour vos contributions et tous ces éclairages.

Bonne journée et bon weekend!
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: [Résolu]Alimenter un champ depuis une liste d'une autret

Message par jeanmi2403 »

Bonjour,
Je pense qu'il nous faudrait un descriptif complet de la tâche a réaliser et du résultat final a obtenir, pour donner un avis adapté.
En commençant par la structure des données, qui me semble encore floue, car c'est là que se situe le problème, qui n'est pas qu'une question de liste déroulante.
On n'est pas très loin du problème xy...
Cordialement,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Verrouillé