[Résolu] Commande listbox SQL + filtre valeur courante

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.
greb
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 02 janv. 2019 10:24

[Résolu] Commande listbox SQL + filtre valeur courante

Message par greb »

Bonjour,

Je débute depuis peu avec Base (et le BASIC et encore plus avec le SQL).
J'ai 2 tables : farmers, et plots (dans le cadre d'une enquête, avec visites de paysans).
Dans un 1er formulaire, je rentre les infos du paysan, avec notamment un ID.
À la fin, j'ai une boîte de liste qui me recense l'ensemble de toutes les parcelles (tous paysans confondus). L'idée est d'en sélectionner une et en cliquant sur le bouton associé, arriver directement à un 2nd formulaire, avec directement les infos de la parcelle sélectionnée.
J'ai réussi, grâce aux forums, à faire ça.

Je mets en pj ici ce que j'ai pour l'instant :
test.odb
Mais j'aimerais que dans ma boîte de liste, ne s'affichent que les parcelles qui concernent le paysan en question, identifiable notamment par son ID (la correspondance avec la table 'plots' est avec la variable 'id_farmer').
Pour l'instant, la ligne SQL est :

Code : Tout sélectionner

SELECT CONCAT( CONCAT( 'Survey ', [id_farmer]), CONCAT( ' - plot no ', [id_plot] )), "ID" FROM "plots"
(je n'ai pas trop compris pourquoi besoin d'autants de CONCATs, mais ça fonctionne...)

Et idéalement, j'aimerais quelque chose comme :

Code : Tout sélectionner

SELECT CONCAT( CONCAT( 'Survey ', [id_farmer]), CONCAT( ' - plot no ', [id_plot] )), "ID" FROM "plots" WHERE "id_farmer" = ...
avec "..." la valeur de l'ID courant du formulaire1 ouvert. J'ai essayé en rentrant manuellement 1 par exemple, et ça fonctionne: ça n'affiche que les parcelles du paysan 1. Mais y a-t-il un moyen de récupérer la valeur du formulaire en cours ?

J'ai cru comprendre que cela pouvait se faire à l'aide d'une macro... Mais je voulais savoir s'il y avait moyen de se passer de macro, et rester sur une formule SQL ?

J'espère que j'ai été assez clair dans mes explications...
En tous cas, merci d'avance pour toute aide !
Benjamin
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par greb le 06 févr. 2019 14:42, modifié 2 fois.
LibreOffice Version: 6.1.3.2 | Lubuntu 18.04
HRk2o
Membre cOOnverti
Membre cOOnverti
Messages : 344
Inscription : 29 mai 2009 08:51
Localisation : Guyane

Re: Commande listbox SQL + filtre valeur courante

Message par HRk2o »

Bonjour,

j'ai créé un nouveau formulaire 'farmers2' après re-structuration et lien relationnel;
les clés primaires doivent être en autovaleur.
cela répond t-il à ce que vous souhaitez?

@+
test2.odb
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.14 et LO 7.3.7.2 sous OsX 10.13.6 High Sierra ; Windows 10 sous AOO 4.1.14 et LibO 7.3.7.2
greb
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 02 janv. 2019 10:24

Re: Commande listbox SQL + filtre valeur courante

Message par greb »

Bonjour,

Merci beaucoup pour votre réponse.
Malheureusement, ce n'est pas cela que je cherche...
Ce que j'aimerais (mais peut-être n'est pas possible sans macro ?), est d'afficher dans la liste déroulante (formulaire farmer) uniquement les parcelles que ce paysan possède. Pour pouvoir en sélectionner une, cliquer sur le bouton associé, et me retrouver sur un second formulaire avec toutes les informations (déjà rentrées) relatives à cette parcelle.
Comme c'est déjà dans le formulaire farmer, je peux réaliser cela, mais je souhaitais pouvoir filtrer la liste (afin de ne pas avoir une liste déroulante avec de très nombreuses entrées dans le cas d'un grand nombre de paysans+parcelles enquêtées).

Si ce n'est pas possible, ce n'est pas très grave, ce n'est juste qu'une petite question de confort !
Et peut-être aussi n'ai-je pas formaté mes formulaires au plus optimal au début...

Merci en tous cas pour le temps passé et la proposition de solution !
LibreOffice Version: 6.1.3.2 | Lubuntu 18.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Commande listbox SQL + filtre valeur courante

Message par jeanmimi »

Bonjour,
Pour la première partie de la demande, il n'y a pas normalement besoin de Macro, mais comme écrit par HRk2o créer un formulaire avec un sous-formulaire, en mettant la bonne relation entre les deux, et en modifiant la structure des Tables pour qu'elles aient des clés primaires de Type INTEGER en Auto-Valeur.
Normalement, dans la Table plots, le champ crops devrait ne stocker que les ID du type de récolte (un ID_crop), et devrait trouver cet ID_crop dans une Table des types de récoltes.
T_plots.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
greb
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 02 janv. 2019 10:24

Re: Commande listbox SQL + filtre valeur courante

Message par greb »

Bonjour,

Merci jeanmimi pour cette nouvelle réponse.
J'imagine qu'il n'y a pas de solution toute faite à mon questionnement, et pense que vais rester du coup sur ce que j'ai déjà.
Je vois bien l'intérêt des solutions que vous proposez (et merci beaucoup !), mais je ne souhaite pas avoir de sous-formulaire dans mon premier formulaire...
Ou alors si je faisais cela, il faudrait j'imagine de toutes manières ensuite avoir une macro qui fasse le lien, via le bouton, entre la sélection dans le sous-formulaire, et l'ouverture du second formulaire (i.e. un formulaire avec toutes les données de la table plots). Et c'est ce que je cherchais à éviter, d'avoir une macro pour cela...

Mais ce n'est qu'un petit "caprice" de confort, du coup, il n'y a pas beaucoup d'enjeu pour moi à résoudre ce questionnement !

Par contre, jeanmimi, pourquoi le champ crops doit-il être un ID...? si c'est pour faire un lien ensuite avec une table [ID_crops, crops], pourquoi ne pas pouvoir directement écrire le nom des cultures ?

Merci en tous cas pour le temps passé sur ma question.
LibreOffice Version: 6.1.3.2 | Lubuntu 18.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Commande listbox SQL + filtre valeur courante

Message par jeanmimi »

greb a écrit :Par contre, jeanmimi, pourquoi le champ crops doit-il être un ID...? si c'est pour faire un lien ensuite avec une table [ID_crops, crops], pourquoi ne pas pouvoir directement écrire le nom des cultures ?
La raison est liée à la philosophie et à l’utilisation des Bases relationnelles où dès l'origine il a été préféré de stocker et enregistrer les ID plutôt que les libellés.
Dans le cas présent, cela permet de stocker des nombres 1, 2, etc plutôt que 50 fois maize et 102 fois beans comme tu peux levoir dans ce deuxième exemple :
Base_farmers_plots_v2.odb
Quant à la question :
greb a écrit : si je faisais cela, il faudrait j'imagine de toutes manières ensuite avoir une macro qui fasse le lien, via le bouton, entre la sélection dans le sous-formulaire, et l'ouverture du second formulaire (i.e. un formulaire avec toutes les données de la table plots).
je répondrai que ça dépend le nombre d'informations à visualiser pour le plot, ce que tu n'as pas indiqué dans ta demande.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
greb
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 02 janv. 2019 10:24

Re: Commande listbox SQL + filtre valeur courante

Message par greb »

jeanmimi a écrit :La raison est liée à la philosophie et à l’utilisation des Bases relationnelles où dès l'origine il a été préféré de stocker et enregistrer les ID plutôt que les libellés.
Ok, étant tout nouveau dans ce monde de Base (et des bases de données en général), je n'ai pas encore cette culture. J'en prends note pour la suite, merci !
jeanmimi a écrit :ça dépend le nombre d'informations à visualiser pour le plot, ce que tu n'as pas indiqué dans ta demande.
Effectivement, je n'ai pas été très précis là-dessus...
En fait, j'utilise ces formulaires au départ comme un outil d'encodage des données d'une enquête auprès de paysans (pour avoir un formulaire, comme quelque chose d'un peu plus sympa/ergonomique à remplir qu'un tableur...), avec en réalité pour ma table plot + de 60 champs de table... Comme ils doivent tous apparaître pour être renseignés, j'ai créé un second formulaire, plutôt que de tout afficher sous forme de table dans un sous-formulaire du formulaire 1 (qui lui a aussi a près de 20 champs à renseigner).
C'est la première fois que j'utilise Base (et BASIC et SQL), et dois du coup sûrement "louper" des bonnes pratiques/optimisations... en attendant, l'ensemble a l'air de fonctionner ! (en espérant que ça continue dans la phase d'encodage...)
LibreOffice Version: 6.1.3.2 | Lubuntu 18.04
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: Commande listbox SQL + filtre valeur courante

Message par Piaf »

Bonjour
Si tu tiens à avoir deux formulaires tu peux tester :
farmer.png
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
greb
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 02 janv. 2019 10:24

Re: Commande listbox SQL + filtre valeur courante

Message par greb »

Bonjour Piaf,

Effectivement, j'étais focalisé sur les listes, mais j'ai réussi à l'appliquer à mon fichier, et ça fait le boulot ! (ça m'a permis aussi d'apercevoir le monde des requêtes. Tout doucement, je comprends un petit peu mieux ce que peut faire et comment fonctionne Base).

Je mets du coup le sujet en résolu.

En tous cas, merci à HRk2o, jeanmimi, et Piaf, pour les propositions et le temps passé sur ma question.

Bonne continuation.
LibreOffice Version: 6.1.3.2 | Lubuntu 18.04