Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Wed 16 April 2014 09:12

christophe_hardy
Participant actif
Lieu: Arras
Date d'inscription: 24 Oct 2011
Messages: 101

QGIS: Formulaire QT Base PostGIS

Bonjour,

je suis en train de mettre en place un formulaire sous QT Designer, pour afficher une fiche lorsque je sélectionne un objet sous QGIS.
A savoir que je charge les données depuis une base PostGIS.
Je suis le tutoriel mis en ligne par @rchéo, mais lors de l'édition de la combobox, j'ai un soucis.
Je souhaite avoir une zone de liste qui m'affiche des nom (nom1, nom2, nom3 ...) mais qui, lorsque je choisi un nom, me mette un numéro identifiant dans la base (1, 2, 3 ...).

J'ai essayé la méthode suivante :
- mise en place du combobox sous Qt
- appel du fichier .ui dans Qgis dans ma couche
- la fiche fonctionne, mais aucune zone de liste disponible
- En revanche, si dans la combobox je saisi manuellement un identifiant, l'enregistrement dans la base PostGIS fonctionne correctement.
Or je souhaite que l'opérateur puisse choisir entre les différentes solutions de ma zone de liste (Nom1, nom2, nom3 ...)

J'ai alors essayé les 2 solutions suivantes :
- directement dans les propriété de la combobox sous Qt, édition de la zone de liste --> dans le formulaire Qgis, la zone est apparente, mais à l'enregistrement, rien ne se passe. (A savoir que dans la base PostGIS, je souhaite enregistrer une donnée de type "Integer")
- en mettant en place dans les propriété de la couche dans QGIS, un type de champ "liste de valeur" au lieu de "édition de ligne" qui est mis par défaut. Je saisie ma zone de liste Valeur et Description. Lorsque je mets à jour la donnée dans le formulaire, rien ne se passe non plus !

Pour résumer, je souhaite mettre en place une combobox qui me propose une liste de noms, mais qu'à l'enregistrement, j'ai un identifiant lié à ce nom dans la base de données.

Quelqu'un connait une astuce pour arranger cela ?

Merci beaucoup, Christophe

Hors ligne

 

#2 Wed 16 April 2014 10:15

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

Re: QGIS: Formulaire QT Base PostGIS

Bonjour Christophe,

Typiquement dans ce genre de cas on fait la différence entre le label et la valeur. Ta 2eme solution devrait fonctionner, as tu pu récupérer les requêtes postgis envoyé par QGIS et valider que tu as bien ce que tu souhaites ? Cela te permettra de définir une piste pour trouver ce qui pause problème.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Wed 16 April 2014 10:39

christophe_hardy
Participant actif
Lieu: Arras
Date d'inscription: 24 Oct 2011
Messages: 101

Re: QGIS: Formulaire QT Base PostGIS

Merci pour ta réponse Yves,

Seulement, comment je peux récupérer cette requête ?

Hors ligne

 

#4 Wed 16 April 2014 11:59

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

Re: QGIS: Formulaire QT Base PostGIS

Bonjour,

Les logs de Postgresql wink Cherche "ddl" dans le fichier postgresql.conf, change log_statement = 'none' à "all" (le mode très bavard) et relance postgresql.

Fait tes requêtes et regarde les logs, fait le minimum de requête, évite d'utiliser pgAdmin en parallèle par exemple wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Wed 16 April 2014 14:04

christophe_hardy
Participant actif
Lieu: Arras
Date d'inscription: 24 Oct 2011
Messages: 101

Re: QGIS: Formulaire QT Base PostGIS

Après avoir essayé de faire une mise à jour de mon champ "zone de liste" (id_operateur), voici ce que j'obtiens dans le log :

Code:

2014-04-16 14:01:35 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:01:35 CEST LOG:  instruction : DECLARE qgisf0_27 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id" FROM "public"."station" WHERE "the_geom" && st_makeenvelope(606052.28222084802109748,7020661.2143262280151248,713303.3091045479523018,7095887.99092916119843721,2154)
2014-04-16 14:01:35 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_27
2014-04-16 14:01:35 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_27
2014-04-16 14:01:35 CEST LOG:  instruction : CLOSE qgisf0_27
2014-04-16 14:01:35 CEST LOG:  instruction : COMMIT
2014-04-16 14:01:36 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:01:36 CEST LOG:  instruction : DECLARE qgisf0_28 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id" FROM "public"."station" WHERE "the_geom" && st_makeenvelope(606052.28222084802109748,7020661.2143262280151248,713303.3091045479523018,7095887.99092916119843721,2154)
2014-04-16 14:01:36 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_28
2014-04-16 14:01:36 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_28
2014-04-16 14:01:36 CEST LOG:  instruction : CLOSE qgisf0_28
2014-04-16 14:01:36 CEST LOG:  instruction : COMMIT

Une idée de ce que ca peut signifier ?

Merci

Hors ligne

 

#6 Wed 16 April 2014 14:11

christophe_hardy
Participant actif
Lieu: Arras
Date d'inscription: 24 Oct 2011
Messages: 101

Re: QGIS: Formulaire QT Base PostGIS

J'ai refait la même requete, mais cette fois dans la zone de liste, j'ai mis Valeur = 1, 2, 3 ... (un entier) et descriptif = 1, 2, 3 ... (Le même entier).
J'ai bien la mise à jour dans la base, ca fonctionne correctement. Voici le Log :

Code:

2014-04-16 14:07:02 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:07:02 CEST LOG:  instruction : DECLARE qgisf0_45 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id" FROM "public"."station" WHERE "the_geom" && st_makeenvelope(606052.28222084802109748,7020661.2143262280151248,713303.3091045479523018,7095887.99092916119843721,2154)
2014-04-16 14:07:02 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_45
2014-04-16 14:07:02 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_45
2014-04-16 14:07:02 CEST LOG:  instruction : CLOSE qgisf0_45
2014-04-16 14:07:02 CEST LOG:  instruction : COMMIT
2014-04-16 14:07:02 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:07:02 CEST LOG:  instruction : DECLARE qgisf0_46 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id","surface"::text,"repere"::text,"nom"::text,"adresse"::text,"debit_nominal"::text,"point_livraison"::text,"puiss_consom"::text,boolout("cloture"),"nb_portail"::text,boolout("taxe_vnf"),"ref_cad"::text,"prop_parcelle"::text,"nom_sre_amont"::text,"nom_sre_aval"::text,boolout("possib_eu"),boolout("echelle_bache"),boolout("echelle_toit"),boolout("escalier"),"alti_seuil"::text,"nb_pomp_debit_nomi"::text,boolout("prebache"),boolout("pluvio"),boolout("debitmetre"),boolout("nourrice"),boolout("transfo_edf"),boolout("gpe_electrogene"),boolout("access_gpe_mobile"),boolout("invers_alim"),"commentaire"::text,"bat_model"::text,"bat_ref"::text,boolout("bat_auto"),"bat_dim_larg"::text,"bat_nb_planche"::text,"bat_date_mep"::text,"bat_date_arret"::text,"bat_vie_theo"::text,"bat_garantie"::text,"bat_prix"::text,"bat_etat"::text,"bat_commentaire"::text,"ibt_pvr_coup"::text,"ibt_date_mep"::text,"tsu_model"::text,"tsu_ref"::text,boolout("tsu_equip_gsm"),"tsu_num_ligne"::text,"tsu_nb_alarme"::text,"tsu_heure_appel"::text,"tsu_date_mep"::text,"tsu_date_arret"::text,"tsu_vie_theo"::text,"tsu_garantie"::text,"tsu_etat"::text,"tsu_commentaire"::text,"gpe_puissance"::text,"gpe_model"::text,"gpe_ref"::text,"gpe_heure"::text,"gpe_date_mep"::text,"gpe_date_arret"::text,"gpe_vie_theo"::text,"gpe_garantie"::text,"gpe_etat"::text,"gpe_commentaire"::text,"pluv_nom"::text,"pluv_resistance"::text,"pluv_conso_elec"::text,"pluv_date_mep"::text,"pluv_date_arret"::text,"pluv_commentaire"::text,"id_zone_influence"::text,"id_acces"::text,"id_commune"::text,"id_concession"::text,"id_type_batardeau"::text,"id_chambre_tranquil"::text,"id_cellule"::text,"id_transformateur"::text,"id_manutention"::text,"id_operateur"::text,"id_coactivite"::text,"id_type_prop_parcelle"::text,"id_alimentation"::text,"id_fournisseur_elec"::text,"id_ligne_telecom"::text FROM "public"."station" WHERE "the_geom" && st_makeenvelope(640762.84343318536411971,7072390.95257457066327333,641835.3537020223448053,7073463.46284340787678957,2154) AND st_intersects("the_geom",st_makeenvelope(640762.84343318536411971,7072390.95257457066327333,641835.3537020223448053,7073463.46284340787678957,2154))
2014-04-16 14:07:02 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_46
2014-04-16 14:07:02 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_46
2014-04-16 14:07:02 CEST LOG:  instruction : CLOSE qgisf0_46
2014-04-16 14:07:02 CEST LOG:  instruction : COMMIT
2014-04-16 14:07:02 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:07:02 CEST LOG:  instruction : DECLARE qgisf0_47 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id","surface"::text,"repere"::text,"nom"::text,"adresse"::text,"debit_nominal"::text,"point_livraison"::text,"puiss_consom"::text,boolout("cloture"),"nb_portail"::text,boolout("taxe_vnf"),"ref_cad"::text,"prop_parcelle"::text,"nom_sre_amont"::text,"nom_sre_aval"::text,boolout("possib_eu"),boolout("echelle_bache"),boolout("echelle_toit"),boolout("escalier"),"alti_seuil"::text,"nb_pomp_debit_nomi"::text,boolout("prebache"),boolout("pluvio"),boolout("debitmetre"),boolout("nourrice"),boolout("transfo_edf"),boolout("gpe_electrogene"),boolout("access_gpe_mobile"),boolout("invers_alim"),"commentaire"::text,"bat_model"::text,"bat_ref"::text,boolout("bat_auto"),"bat_dim_larg"::text,"bat_nb_planche"::text,"bat_date_mep"::text,"bat_date_arret"::text,"bat_vie_theo"::text,"bat_garantie"::text,"bat_prix"::text,"bat_etat"::text,"bat_commentaire"::text,"ibt_pvr_coup"::text,"ibt_date_mep"::text,"tsu_model"::text,"tsu_ref"::text,boolout("tsu_equip_gsm"),"tsu_num_ligne"::text,"tsu_nb_alarme"::text,"tsu_heure_appel"::text,"tsu_date_mep"::text,"tsu_date_arret"::text,"tsu_vie_theo"::text,"tsu_garantie"::text,"tsu_etat"::text,"tsu_commentaire"::text,"gpe_puissance"::text,"gpe_model"::text,"gpe_ref"::text,"gpe_heure"::text,"gpe_date_mep"::text,"gpe_date_arret"::text,"gpe_vie_theo"::text,"gpe_garantie"::text,"gpe_etat"::text,"gpe_commentaire"::text,"pluv_nom"::text,"pluv_resistance"::text,"pluv_conso_elec"::text,"pluv_date_mep"::text,"pluv_date_arret"::text,"pluv_commentaire"::text,"id_zone_influence"::text,"id_acces"::text,"id_commune"::text,"id_concession"::text,"id_type_batardeau"::text,"id_chambre_tranquil"::text,"id_cellule"::text,"id_transformateur"::text,"id_manutention"::text,"id_operateur"::text,"id_coactivite"::text,"id_type_prop_parcelle"::text,"id_alimentation"::text,"id_fournisseur_elec"::text,"id_ligne_telecom"::text FROM "public"."station" WHERE "id"=3
2014-04-16 14:07:02 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_47
2014-04-16 14:07:02 CEST LOG:  instruction : CLOSE qgisf0_47
2014-04-16 14:07:02 CEST LOG:  instruction : COMMIT
2014-04-16 14:07:06 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:07:06 CEST LOG:  instruction : DECLARE qgisf0_48 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id" FROM "public"."station" WHERE "the_geom" && st_makeenvelope(606052.28222084802109748,7020661.2143262280151248,713303.3091045479523018,7095887.99092916119843721,2154)
2014-04-16 14:07:06 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_48
2014-04-16 14:07:06 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_48
2014-04-16 14:07:06 CEST LOG:  instruction : CLOSE qgisf0_48
2014-04-16 14:07:06 CEST LOG:  instruction : COMMIT
2014-04-16 14:07:07 CEST LOG:  instruction : BEGIN
2014-04-16 14:07:07 CEST LOG:  instruction : UPDATE "public"."station" SET "id_operateur"='1' WHERE "id"=3
2014-04-16 14:07:07 CEST LOG:  instruction : COMMIT
2014-04-16 14:07:07 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:07:07 CEST LOG:  instruction : DECLARE qgisf0_49 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id" FROM "public"."station" WHERE "the_geom" && st_makeenvelope(606052.28222084802109748,7020661.2143262280151248,713303.3091045479523018,7095887.99092916119843721,2154)
2014-04-16 14:07:07 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_49
2014-04-16 14:07:07 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_49
2014-04-16 14:07:07 CEST LOG:  instruction : CLOSE qgisf0_49
2014-04-16 14:07:07 CEST LOG:  instruction : COMMIT
2014-04-16 14:07:07 CEST LOG:  instruction : BEGIN READ ONLY
2014-04-16 14:07:07 CEST LOG:  instruction : DECLARE qgisf0_50 BINARY CURSOR FOR SELECT st_asbinary(ST_Force2D("the_geom"),'NDR'),"id" FROM "public"."station" WHERE "the_geom" && st_makeenvelope(606052.28222084802109748,7020661.2143262280151248,713303.3091045479523018,7095887.99092916119843721,2154)
2014-04-16 14:07:07 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_50
2014-04-16 14:07:07 CEST LOG:  instruction : FETCH FORWARD 2000 FROM qgisf0_50
2014-04-16 14:07:07 CEST LOG:  instruction : CLOSE qgisf0_50
2014-04-16 14:07:07 CEST LOG:  instruction : COMMIT

Seulement, je souhaiterai afficher, dans ma liste de choix, une Valeur =1, 2, 3 pour des Noms1, Noms2, Nom3 ...

Je ne sais pas si ca peut aider à la recherche d'une solution ... Mais merci

Hors ligne

 

#7 Fri 18 April 2014 10:02

christophe_hardy
Participant actif
Lieu: Arras
Date d'inscription: 24 Oct 2011
Messages: 101

Re: QGIS: Formulaire QT Base PostGIS

Pour ceux que ca intéresse, j'ai trouvé une solution à mon problème.
Je souhaite faire un formulaire sous Qt Designer, qui me permette de consulter et mettre à jour des données d'une base PostGIS, à partir de QGIS.
Il existe une manière de faire fonctionner les zones de liste dans des tables attributaires reliées à une table que l'on souhaite renseigner (Table 1).
- Dans QT, insérer une combobox, renseigner l'objectname = id_table2 (ne pas mettre de liste de valeurs) qui est la clé étrangère.
- Dans QGIS,importer les tables PostGIS Table 1 et Table 2.
- Dans les propriétés de Table1 dont on veut établir le formulaire, dans l'onglet "Champs", importer le .ui, et dans le champs "id_table2", mettre un type "valeur relationnelle". Renseigner la "Table2", puis la clé et la valeur.
- Dans cette configuration, la relation fonctionne correctement.

N'hésitez pas à me faire part de vos remarques et commentaires.

Merci Yves pour ton aide.

Christophe

Dernière modification par christophe_hardy (Fri 18 April 2014 10:03)

Hors ligne

 

#8 Wed 16 July 2014 10:37

myotis
Juste Inscrit !
Date d'inscription: 15 Jul 2014
Messages: 5

Re: QGIS: Formulaire QT Base PostGIS

Bonjour Christophe,

Je suis dans la même configuration que vous, j'ai une table SITE avec la clé étrangère ID_aff (contient des infos géométriques de type polygone) et une autre AFFAIRE contenant la clé primaire ID_aff (non géométrique seulement relationnelle) sous Postgres(9.3)/Postgis. J'exploite cette base de données sous QGIS (2.2) avec un formulaire de saisie de QT Designer pour l'ajout d'un polygone sur la couche SITE.

J'aimerai tout comme vous avoir une liste déroulante contenant les CODES de ma table AFFAIRE mais une fois un code sélectionner renvoie ID_AFF dans ma table SITE.

J'ai donc suivi votre solution:
- Dans QT, j'ai insérer une combobox et renseigné objectname = id_aff
- Dans QGIS, j'ai importer les deux tables de postgres: affaire et site
- Dans les propriétés de ma table SITE, puis dans l'onglet champs j'ai importer le fichier .ui
et dans le champs id_aff j'ai mis le type relationnelle avec la couche AFFAIRE, la colonne clé Id_affaire, et la colonne de valeurs Code

Mais j'ai un soucis: dans ma liste déroulante j'ai bien la liste des CODES de mes AFFAIRES par contre ça ne me renvoie pas ID_AFFAIRE mais le CODE dans la table attributaire de SITE, et ça me pose un sacré problème car je ne peux pas enregistré l'ajout d'un site à cause de postgres (conflit de clé)....

merci de votre aide

Dernière modification par myotis (Wed 16 July 2014 10:38)

Hors ligne

 

#9 Sun 29 March 2020 15:01

Ryma Bounemer
Juste Inscrit !
Date d'inscription: 29 Mar 2020
Messages: 1

Re: QGIS: Formulaire QT Base PostGIS

Bonjour,

Je travaille sur un fichier Qgis 3.8, et ce matin lors de l'ouverture il m'affiche l'erreur suivante: tag mismatch à la ligne 430889, colonne 13
J'ai essayé de l'ouvrir sous format text et l'erreur se situe a ce niveau la:  Mais je ne sais pas comment remédier à la situation.
Savez-vous comment je peux résoudre le problème sans avoir à tout recommencer ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB