|
Started by FAVARD / Parc nation, Apr., 25 2024 8:31 AM - 2 replies |
| |
| | | |
|
| |
Registered member 1 message |
|
Posted on April, 25 2024 - 8:31 AM |
Bonjour,
Nous travaillons sur des bases PostgreSQL. Nous avons deux bases de données distinctes. Dans postgreSQL nous utilisons la notion de table distante pour lier des données entre les deux bases.
Dans la base prod nous avons une table de liaison action_x_commune. Elle contient les champs suivants : code_insee id_action
Dans la base ref_pnrun nous avons une table contenant les communes, avec les champs : code_insee (clef unique) nom_officiel (nom de la commune)
Nous souhaitons simplement réaliser une requête qui pour chaque action de action_x_commune retourne le nom de la commune associé à l'identifiant de l'action. En principe très simple. Sauf que Webdev ne gère pas les tables distantes.
Le seul exemple de gestion multi-base que j'ai trouvé https://doc.pcsoft.fr/?2034010, propose de combiner deux sources de données issues chacune d'une base différente en exécutant une troisième requête pour assurer la liaison entre les enregistrements des deux bases.
Voici mon code :sMaReq1 est une chaîne = [ SELECT action_x_communes.code_insee, action_x_communes.id_action FROM action_x_communes ] sMaReq1 = ChaîneConstruit(sMaReq1, "LIMIT 1, 10") SD1 est une Source dede Données SI PAS HExécuteRequêteSQL(SD1,SRV_DEV_DB_Prod,hRequêteDéfaut,sMaReq1) ALORS Erreur(HErreurInfo()) SINON Info("La requête contient " + HNbEnr(SD1) + " enregistrements.") FIN
sMaReq2 est une chaîne = [ SELECT commune.code_insee, commune.nom_officiel AS nom_commune FROM commune ] sMaReq2 = ChaîneConstruit(sMaReq2, "LIMIT 1, 10") SD2 est une Source dede Données SI PAS HExécuteRequêteSQL(SD2,SRV_DEV_DB_Ref_pnrun,hRequêteDéfaut,sMaReq2) ALORS Erreur(HErreurInfo()) SINON Info("La requête contient " + HNbEnr(SD2) + " enregistrements.") FIN
sMaReq3 est une chaîne = ChaîneConstruit("SELECT * FROM %1, %2 WHERE %1.%3 = %2.%3", SD1, SD2,"code_insee") SD3 est une Source dede Données SI PAS HExécuteRequêteSQL(SD3,SRV_DEV_DB_Ref_pnrun,hRequêteSansCorrection,sMaReq3) ALORS Erreur(HErreurInfo()) SINON Info("La requête contient " + HNbEnr(SD3) + " enregistrements.") FIN
Les deux premières requêtes retournent des sources de données correctes. En revanche l'exécution de la troisième requête retourne le message d'erreur suivant :
Même message si j'utilise l'autre connexion. Avez vous des pistes pour solutionner le problème ? Webdev est il incompatible avec une distribution multi-base des données ? Merci pour votre aide. |
| |
| |
| | | |
|
| | |
| |
Posted on April, 25 2024 - 10:56 AM |
Hello,
Pour ma part j'utilise les dblink de postgresql quand j'ai besoin de faire des requêtes entre différentes bases.
select dominante__net_peu from t_caract_sous_par_for left join dblink('host=localhost user=gisuser password=gisuser dbname=''donnees_communes''' , 'select * from t_natures_peuplement') t_natures_peuplement (id__nat_peu integer, code__nat_peu character varying(20), libelle__nat_peu character varying(100), dominante__net_peu character varying(20), couleur__nat_peu integer) on t_caract_sous_par_for.valeur__car_sou_par_for::integer=t_natures_peuplement.id__nat_peu where id__geo_sou_par_for=%1 and cle__car_sou_par_for = 'ActuelNaturePeuplement' |
| |
| |
| | | |
|
| | |
| |
Posted on April, 25 2024 - 11:08 AM |
Bonjour ,
Peut être une piste , met un HOuvreConnexion (SRV_DEV_DB_Ref_pnrun) avant ton HExécuteRequêteSQL(SD3,SRV_DEV_DB_Ref_pnrun,hRequêteSansCorrection,sMaReq3)
Cordialement. |
| |
| |
| | | |
|
| | | | |
| | |
|