Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#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
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
Re: QGIS: Formulaire QT Base PostGIS
Bonjour,
Les logs de Postgresql 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
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