[Résolu] Liens_BD_zones_de_liste_deroulantes

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.
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

[Résolu] Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

Bonjour à toutes et tous !

Je suis totalement novice sous OO Base et cherche à créer une base de données qui me permette de rentrer des données, interrogeable ensuite dans une optique de statistiques.
J'ai lu les différents tutos relatifs au fonctionnement de Base, ainsi que les sujets spécifiques à la mise en place de zones de listes déroulantes, mais je ne m'en sors pas... :fou:

Dans le détail, je souhaiterais créer une base de données principale dans laquelle plusieurs champs fonctionnerais sous forme de listes déroulantes, à partir de tables annexes. J'ai déjà créé les différentes tables et sous-tables, mais au moment d'établir les relations entre ces tables, le message d'erreur Primary or unique constraint on main table : "Prelevement" in statement [ALTER TABLE "OBJET" ADD FOREIGN KEY ("OBJET") REFERENCES "Prelevement" (Objet")] s'affiche.

Pour préciser l'exemple que je transmets en PJ, je souhaiterais que la base principale soit la table "Prelevements". Dans cette table, je souhaiterais ensuite que les champs "OBJET", "ESSENCE", "AGE DE L'ARBRE", "NATURE DES PIECES", "PRESENCE D'AUBIER", "MILIEU DE POUSSE" et "OUTILS", soient constituées de listes déroulantes, créées à partir des tables associées annexes.

Je ne saisis pas où se situe mon erreur : j'ai mis une clé d'incrémentation en INTEGER pour chacune des tables et les intitulés des champs à relier sont identiques (même nom et même type).

J'espère que mes questions sont à peu près claires...
Merci par avance de votre aide !
Pièces jointes
BD_dendros.odb
(5.12 Kio) Téléchargé 91 fois
Dernière modification par micmac le 27 avr. 2021 15:49, modifié 4 fois.
Raison : [Résolu] remplace [RESOLU]
LibreOffice 7.0.5.2 sous Windows 10 (x64)
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: Liens_BD_zones_de_liste_deroulantes

Message par jeanmimi »

Bonjour,
Dans la Table Prelevement, l'ID de cette Table devrait être en Auto-valeur.
Et
TheHobbit a écrit :les champs "OBJET", "ESSENCE", "AGE DE L'ARBRE", "NATURE DES PIECES", "PRESENCE D'AUBIER", "MILIEU DE POUSSE" et "OUTILS"
devraient être de Type INTEGER pour ensuite avoir des Relations entre les Tables.
J'ai créé un Formulaire pour la Table Prelevements avec une Zone de liste pour OBJET
Pièces jointes
BD_dendros_v2.odb
(15.15 Kio) Téléchargé 93 fois
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

RE-bonjour,

merci pour la réponse !
J'ai modifié les paramètres indiqués, (ID de Prelevement et passé tous les champs mentionnés en INTEGER), mais au moment d'établir les relations entre les champs "OBJETS" de la table Prelevement et de la table OBJET, le message d'erreur suivant s'affiche : Column types do not match in statement [ALTER TABLE "OBJET" ADD FOREIGN KEY ("OBJET") REFERENCES "Prelevement" ("OBJET")] .

Le seul lien possible à établir est entre l'ID de "Prelevement" et le champ OBJET de la table OBJET. Sans doute est-ce lié à la présence de la clé primaire du champ ID (nécessaire pour établir des liens entre tables ?).
La solution est-elle de passer le champ "OBJET" de la table Prelevement en clé primaire ?
Mais dans ce cas comment faire pour que plusieurs champs de la table "Prelevement" soient reliés aux champs des autres tables (pour les listes déroulantes), alors qu'il ne peut y avoir qu'une seule clé primaire par table ?

Merci !
Et merci pour le formulaire, c'est parfaitement ce que je cherche à faire !
LibreOffice 7.0.5.2 sous Windows 10 (x64)
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: Liens_BD_zones_de_liste_deroulantes

Message par jeanmimi »

Dans cette version, j'ai passé tous les champs de la Table Prelevements en ID lorsque c'était nécessaire. J'ai aussi remplacé les espaces et autres signes des noms des Champs par un _ de façon à simplifier les actions des codes SQL.
Il te reste à modifier le formulaire pour remplacer les champs par des Zones de liste, alimentées par le code SQL.
Pièces jointes
BD_dendros_v3.odb
(16.3 Kio) Téléchargé 90 fois
Relations_dendros.jpg
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

Merci beaucoup ! C'est exactement ce qu'il me fallait !
Je vais essayer de modifier le formulaire, pour y insérer des zones de listes... J'espère trouver la manip sans problème...

Encore merci !
LibreOffice 7.0.5.2 sous Windows 10 (x64)
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

Bon, après un nombre incalculable de tentatives, il me faut encore un petit peu d'aide...
J'ai tenté de modifier le formulaire créé par Jeanmimi, en faisant (prenons en exemple le champ OBJET qui est présent dans la table principale et qui est dans une table annexe mise en relation) et qui doit donner une zone de liste :

Formulaire > Clic droit : Modifier > Clic droit sur le champ OBJET à modifier en zone de liste déroulante > Remplacer par : Zone de liste > Clic gauche sur Zone de liste dans la barre d'outil > tracé de l'encart dans le formulaire

A partir de là, l'Assistant Zone de liste s'ouvre. Puis : Clic gauche sur OBJET > Suivant > Clic gauche sur OBJET > Suivant > Clic gauche sur ID_OBJET et sur OBJET > Terminé

Une Zone de liste (qui apparait vierge à l'écran) est créée. Lorsque je désactive le mode ébauche, la zone de liste contenant les mots de la table OBJET s'affiche, mais sans être reliée à la base principale (le cadre "flotte" et ne correspond pas à une liste déroulante au niveau du champ OBJET de la table principale).

Je ne comprends pas la manip' qu'il faut faire pour obtenir une liste déroulante. En lisant les différents tutos, j'avais l'impression de suivre la procédure... (En PJ je mets des capture d'écran des différentes manip successives que je fais, pour voir où est le soucis)

Pouvez-vous me renseigner sur la manipulation ?

Merci !
Pièces jointes
captures.odg
(73.91 Kio) Téléchargé 89 fois
LibreOffice 7.0.5.2 sous Windows 10 (x64)
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: Liens_BD_zones_de_liste_deroulantes

Message par jeanmimi »

Pour remplacer une colonne de Type Texte par une de Type Zone de liste, il faut que le formulaire soit en Mode Édition/Modification, puis clic droit sur le titre de la colonne pour avoir cet affichage :
Remplacer Champ Texte par Zone de liste.jpg
Une fois que le remplacement a été fait, dans la source ds donnes, il faut choisir SQL ce qui active avec ma version une boite de dialogue comme celle-ci :
Zone de Liste avec SQL.jpg
Il faut alors cliquer sur les 3 petits points pour lancer l'assistant pour créer le code SQL comme celui affiché.
Dernière modification par jeanmimi le 20 avr. 2021 11:43, modifié 1 fois.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9224
Inscription : 28 août 2010 10:45

Re: Liens_BD_zones_de_liste_deroulantes

Message par micmac »

Bonjour et bienvenue,
Dans votre signature il y a écrit : OpenOffice 4.1.5
Cette version de OpenOffice est déclarée obsolète depuis longtemps.
Si c'est une obligation, mentionnez-le dans votre signature en ajoutant Obligation de version.

Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version
Accès direct à votre signature pour la corriger.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

Re bonjour !

Merci jeanmimi pour l'explication, je m'en suis sortie sans problème ! La base est enfin comme je la souhaitais !

Reste à la mettre en forme du point de vue des couleurs et présentation... et à l'exploiter !

Encore merci pour tout, je passe le sujet en résolu !
LibreOffice 7.0.5.2 sous Windows 10 (x64)
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

Bon... Encore un petit problème...

Le formulaire construit avec la table Prelevement fonctionne parfaitement. Mais à celui-ci j'aurais souhaité associer le formulaire LOCALITE. En sachant que le formulaire LOCALITE enregistre les infos suivantes : Pays / Région / Commune / Adresse.
Or pour une même adresse, il y a plusieurs prélèvements distincts à enregistrer, d'où mon idée de séparer les tables et formulaire, en pensant pouvoir les associer en second temps (dans l'idée de ne pas devoir remplir la même adresse 9 à 10 fois d'affilée dans le même formulaire, mais de pouvoir plutôt rentrer l'adresse une seule fois puis de pouvoir remplir les différents prélèvements associés à cette adresse).

Maintenant, je ne parvient pas à lier les deux formulaires et j'en viens à douter que cela soit possible...
Est-ce possible et, si oui, comment faire ? Dans le cas ou cela ne serait-pas possible en état quelle serait la meilleure marche à suivre : peu-être modifier la table Prelevement puis le formulaire Prélèvement en y rajoutant les champs de l'actuelle table LOCALITE ?

Désolée pour toutes ces questions... et merci d'avance pour vos réponses !

PS : je vais faire une mise à jour de ma version d'OO.
LibreOffice 7.0.5.2 sous Windows 10 (x64)
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

En auto-réponse à mon post précédent, j'ai fini par trouver une manip' qui me permette d'aboutir à la présentation que je souhaitais avoir pour mon formulaire (cf. PJ).
Maintenant, il est possible que du point de vue "fonctionnel" cela ne soit pas viable.

Cette base de données porte sur des analyses de bois faites sur des structures bâties dans plusieurs pays et dans plusieurs régions/villes/villages. L'optique de base est de pouvoir inventorier toutes ces analyses avec les différents items qu'elles impliquent, pour pouvoir ensuite faire des requêtes et des statistiques.
En sachant que pour une même ville, plusieurs analyses doivent êtres inventoriées.
Pour exemple (factice) : 10 analyses ont été faites au 4 rue de la Monnaie, 9 autres au 2 rue des Perles et 7 autres au 12 rue des Fleurs à Bordeaux.
Il faudrait donc que je puisse remplir les intitulés de localisation : France / Nouvelle-Aquitaine / Bordeaux / 4 rue de la Monnaie. Puis inventorier les 10 analyses dans le formulaire dédié.
Ensuite pouvoir faire de même avec France / Nouvelle-Aquitaine / Bordeaux / 2 rue des Perles. Puis inventorier les 9 analyses. Etc...

Ma question (sans doute très bête) étant : comment réaliser ce type d'enregistrements (le formulaire est-il adapté en l'état ?) pour pouvoir ensuite interroger l'ensemble des données (portant sur TOUTES les analyses, de TOUTES les régions et de TOUTES les villes simultanément ?)

Merci !
Pièces jointes
BD_dendros_v3_2.odb
(16.32 Kio) Téléchargé 83 fois
LibreOffice 7.0.5.2 sous Windows 10 (x64)
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: Liens_BD_zones_de_liste_deroulantes

Message par jeanmimi »

TheHobbit a écrit :peu-être modifier la table Prelevement puis le formulaire Prélèvement en y rajoutant les champs de l'actuelle table LOCALITE ?
Oui, c'est ce qu'il faut faire.
TheHobbit a écrit :Il faudrait donc que je puisse remplir les intitulés de localisation : France / Nouvelle-Aquitaine / Bordeaux / 4 rue de la Monnaie. Puis inventorier les 10 analyses dans le formulaire dédié.
Pour le faire, il faut ajouter une Table T_selection, avec champ ID_Selection (INTEGER) et Selection (TEXTE VARCHAR_IGNORECASE), puis faire ce qui est décrit ici :
https://forum.openoffice.org/fr/forum/v ... 662#p81393
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

Re-bonjour !
Merci pour la réponse !
Modifier la table prélèvement et le formulaire ne devrait pas poser de soucis. De même que de créer une nouvelle table pour la sélection. Reste à voir si je parviendrais à suivre le reste de la procédure...
Si je comprends bien, le formulaire que j'ai créé à partir des deux tables distinctes (voir la PJ) n'est pas fonctionnel en l'état ?

Merci
Pièces jointes
BD_dendros_v3_2.odb
(16.58 Kio) Téléchargé 89 fois
LibreOffice 7.0.5.2 sous Windows 10 (x64)
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: Liens_BD_zones_de_liste_deroulantes

Message par jeanmimi »

TheHobbit a écrit :Si je comprends bien, le formulaire que j'ai créé à partir des deux tables distinctes (voir la PJ) n'est pas fonctionnel en l'état ?
Les relations entre les Tables, et en particulier pour la Table LOCALITE, devraient être comme ci-dessous :
Relations entre Tables.jpg
TheHobbit a écrit :une nouvelle table pour la sélection. Reste à voir si je parviendrais à suivre le reste de la procédure...
Si tu as réussi, ton formulaire de sélection devrait ressembler à celui de la Base ci-dessous :
Pièces jointes
BD_dendros_v4.odb
(26.24 Kio) Téléchargé 88 fois
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
TheHobbit
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 19 avr. 2021 09:56

Re: Liens_BD_zones_de_liste_deroulantes

Message par TheHobbit »

Re-bonjour !

Merci pour les renseignements !

Au final, le formulaire fonctionne comme prévu, les champs et les liens se font comme je le souhaitais, donc de ce point de vue là c'est parfait !
J'ai commencé à remplir le formulaire avec les données prévues et au départ tout allait bien. Cependant, d'un coup, sans que je ne comprenne pourquoi, le formulaire ne fonctionne plus. Les données sont toujours affichées dans les différentes tables, mais ne s'affichent plus dans le formulaire. La barre d'outil et le bouton d’actualisation (afficher les données) ne sont plus fonctionnels... Le formulaire est figé, comme en lecture seule...
Quelqu'un aurait une idée de l'origine du problème ?

Merci !
LibreOffice 7.0.5.2 sous Windows 10 (x64)
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: Liens_BD_zones_de_liste_deroulantes

Message par jeanmimi »

Bonjour,
Je crois que tu devrais déclarer ce fil de messages en Résolu, et en ouvrir un nouveau pour le blocage de ta Base.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Verrouillé