[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.

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

Messagepar greb » 04 Fév 2019 13:51

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
(13.73 Kio) Téléchargé 20 fois


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   AgrandirRéduire
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   AgrandirRéduire
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
Dernière édition par greb le 06 Fév 2019 15:42, édité 2 fois.
LibreOffice Version: 6.1.3.2 | Lubuntu 18.04
greb
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 02 Jan 2019 11:24

Re: Commande listbox SQL + filtre valeur courante

Messagepar HRk2o » 04 Fév 2019 16:40

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
(24.54 Kio) Téléchargé 17 fois
AOO 4.15 et LO 4.37 sous OsX El Capitan ;AOo 4.15 sous OsX Sierra + Windows 7 sous AOO 4.15 et LibO 4.4.6
HRk2o
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 243
Inscrit le : 29 Mai 2009 09:51
Localisation : Guyane

Re: Commande listbox SQL + filtre valeur courante

Messagepar greb » 04 Fév 2019 17:07

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
greb
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 02 Jan 2019 11:24

Re: Commande listbox SQL + filtre valeur courante

Messagepar jeanmimi » 04 Fév 2019 18:04

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
T_plots.png (22.23 Kio) Consulté 321 fois
Pièces jointes
Base_fermiers_plots.odb
(23.76 Kio) Téléchargé 15 fois
LibreOffice Version : Version: 6.3.1.2 (x64) (7 septembre 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 14949
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

Re: Commande listbox SQL + filtre valeur courante

Messagepar greb » 04 Fév 2019 18:19

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
greb
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 02 Jan 2019 11:24

Re: Commande listbox SQL + filtre valeur courante

Messagepar jeanmimi » 04 Fév 2019 18:34

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
(24.47 Kio) Téléchargé 16 fois

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.
LibreOffice Version : Version: 6.3.1.2 (x64) (7 septembre 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 14949
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

Re: Commande listbox SQL + filtre valeur courante

Messagepar greb » 04 Fév 2019 18:51

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
greb
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 02 Jan 2019 11:24

Re: Commande listbox SQL + filtre valeur courante

Messagepar Piaf » 04 Fév 2019 21:39

Bonjour
Si tu tiens à avoir deux formulaires tu peux tester :
farmer.png
A+
Pièces jointes
test(2).odb
(23.26 Kio) Téléchargé 21 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: Commande listbox SQL + filtre valeur courante

Messagepar greb » 06 Fév 2019 15:42

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
greb
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 02 Jan 2019 11:24


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité