Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 03-06-2009 13:59:04

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Problème DBLink et Powerbuilder

Bonjour à tous..

J'ai une question sur la compatibilité entre Powerbuilder et les DBLink oracle.

Je travaille sur Powerbuilder 10.5.1 avec oracle 8i (et aussi Oracle 10g).

Depuis un compte oracle, j'accède à une autre base grâce à des DBLink entre ces bases.

Tout marche bien depuis un Sql viewer. Voici un exemple de requête toute simple:

Code: sql

select CODE_COMMUNE, LIBELLE_COMMUNE FROM TABLE_COMMUNE@SSF_LINK;

Mais je dois utiliser ces DB Link depuis Powerbuilder..

Dans une DataWindow qui sert de DropDown Datawindow, la requête du dessus ne passe pas.

Quelqu'un a-t-il déjà utilisé les DB-LINK dans Powerbuilder ?

Une solution serait de créer une table temporaire dans ma base utilisée par l'application PB, puis d'appeler une procédure externe qui fera le select sur la table de l'autre base via le DBLink et qui retournera le résultat dans la table temporaire récemment créée. La DataWindow de Powerbuilder pointera directement sur cette table temporaire et non plus sur la table de l'autre base via le DBLink

Mais afin d'éviter la création d'une table temporaire et l'appel à une procédure, y a-t-il moyen d'utiliser les DBLink simplement dans powerbuilder ?

Merci d'avance pour votre réponse, quelle qu'elle soit.

Kalini

Hors ligne

 

#2 03-06-2009 14:07:42

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: Problème DBLink et Powerbuilder

Bonjour,

Va voir acces à 2 bases

Peut-être que ça répondra à ta question

Hors ligne

 

#3 03-06-2009 14:34:06

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Problème DBLink et Powerbuilder

nico a écrit:

Bonjour,

Va voir acces à 2 bases

Peut-être que ça répondra à ta question

Bonjour nico.
Merci pour ta réponse rapide..

Effectivement, c'est une solution intéressante..

Par contre, ça oblige à mettre le mot de passe de la deuxième base en dur dans le programme ou à développer un code qui irait chercher ce mot de passe quelque part..  C'est toujours possible à faire, mais malheureusement, j'ai bien le mot de passse de ma base de test, mais je n'ai pas le mot de passe de la base de production, et on ne me le donnera pas, je pense.. Donc, je suis concé pour utiliser cette solution..

J'ai tout de même essayé dans l'outil de développement de créer une connexion pour cette deuxième base (en test), et j'ai un message d'erreur d'origine Powerbuilder que je n'ai jamais eu auparavant pour toutes les autres déclaration de base:

Please connect as the powerbuilder Catalog Owner. This is necessary for the initial connection to Oracle  to GRANT privileges on the repository

Quelqu'un saurait me dire ce que ça veut dire ? Qu'elle est ce catalogue dont parle ce message ?

Hors ligne

 

#4 03-06-2009 14:58:25

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: Problème DBLink et Powerbuilder

Il faut renseigner dans ton profile de connection le propriétaire des tables

Code: pb

SQLCA.DBParm = "PBCatalogOwner='SYSTEM'"

Hors ligne

 

#5 03-06-2009 15:04:22

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Problème DBLink et Powerbuilder

Merci Nico.
J'ai vérifié, il était bien à SYSTEM..

J'ai modifié pour mettre un autre nom et là, ça passe.. Bon, je ne vais pas chercher plus loin, ça fonctionne.
merci..

Donc, j'arrive à connecter mes 2 bases, je vais voir si je peux éventuellement faire comme tu m'as conseillé, mais il va falloir que je fasse un beau sourire à la DBA pour avor le mot de passe de la base de production ..

Si quelqu'un a des informations sur l'utilisation des DBLink avec Powerbuilder, je suis tuojours preneur..

Merci encore Nico..

Hors ligne

 

#6 03-06-2009 16:48:50

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Problème DBLink et Powerbuilder

pour info, j'ai utilisé les DBlinks Oracle (8-10) avec PB (9-11) et cela a toujours fonctionné sans anicroche...


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 04-06-2009 07:17:28

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Problème DBLink et Powerbuilder

erasorz a écrit:

pour info, j'ai utilisé les DBlinks Oracle (8-10) avec PB (9-11) et cela a toujours fonctionné sans anicroche...

Salut erasorz..

OK, peux tu m'en dire d'avantage ?

Car moi, quand je mets ma requête citée plus haut, dans la DATAWindow, en mettant bien @NOM-DBLINK derrière le nom de la table, ça ne fonctionne pas.. Je ne peux pas compiler..

La seule façon que je vois pour utiliser les DBLink, c'est la création de synonymes sur les tables auxquelles on peut accéder via les DBLink.. Là, Powerbuilder ne devrait pas avoir de soucis..
Mais pour le moment, je ne me vois pas trop demander aux DBA, la création de + de 300 synonymes..

Donc, si tu peux m'éclairer sur ta façon d'utiliser les DBLink, sans avoir besoin des synonymes, ça m'intéresserait, parce que je rencontre quelques soucis pour utiliser la méthode de "contournement" qui consiste à connecter 2 bases en même temps (connexion de 2 Datawindows sur 2 bases différentes en même temps)..

C'est assez urgent, merci d'avance.

Dernière modification par Kalini (04-06-2009 07:59:15)

Hors ligne

 

#8 04-06-2009 08:06:48

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Problème DBLink et Powerbuilder

Kalini a écrit:

OK, peux tu m'en dire d'avantage ?

c'est dans un environnement ou il y a une base de prod et une base d'archive
pour simplifier :  les commandes datant de plus qu'un nb de jours donné (p.ex 30), passent de la base de prod à la base d'archive (couper-coller)
donc pour faire une requête qui recherche les id de toutes les commandes :

Code: sql

select id
from commande
union
select id
from commande@db_arch

dans PB je me connecte à la base de prod
dans cette base de prod il y a le dblink db_arch qui pointe sur la base d'archive


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#9 04-06-2009 09:08:10

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Problème DBLink et Powerbuilder

Merci pour cette réponse rapide.

J'ai le même style d'environnement que toi:
Dans PB, je suis connecté à ma base principale. J'ai mon DB-LINK (ssf_link) créé dans cette base et qui pointe sur une base secondaire.

Si je rajoute la commande suivante dans une fonction PB, ça fonctionne bien.

Code: pb

select count(*) into :v_nbr from liste_communes_tmp@SSF_LINK;


La valeur v_nbr  retourne bien le nombre exact de lignes dans la table liste_communes_tmp.

Par contre, si je veux exécuter une procédure externe présente sur ma base secondaire et accessible via le DBLink, depuis cette même foncion PB, là, ça ne fonctionne pas:

Code: pb

DECLARE listeCommunes PROCEDURE FOR ssf_rues_pkg.listeCommunes@SSF_LINK;
EXECUTE listeCommunes;  


A l'exécution, j'ai le message Oracle suivant:
ORA-02019: connection description for remote database not found

Alors que la requête juste au dessus fonctionne et que l'exécution de la procédure depuis un SQlViewer depuis le même compte oracle, fonctionne aussi.


Idem lorsque je crée une DataWindow avec comme requête:

Code: pb

Select code_commune, libelle_commune from liste_communes_tmp@SSF_LINK


La compilation fonctionne bien (maintenant), mais l'exécution du programme me donne la même erreur que pour la procédure:

Select Error: ORA-02019: connection description for remote database not found
select code_commune, libelle_commune from liste_communes_tmp@SSF_LINK


Je ne comprends pas. ça semble lié maintenant à un problème Oracle, mais pourtant la procédure et la DW sont exécutés via PB, depuis le même compte oracle que la première requête qui fait un count(*) et qui elle fonctionne..

La procédure exéctuée via un SQL editor à travers le DBLink fonctionne ..

Dernière modification par Kalini (04-06-2009 09:10:16)

Hors ligne

 

#10 04-06-2009 09:17:16

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Problème DBLink et Powerbuilder

Autant pour moi, je crois avoir trouvé la raison ..

Je vérifie avant d'affirmer ça..

Hors ligne

 

#11 04-06-2009 10:19:28

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Problème DBLink et Powerbuilder

Bon, en fait, je n'ai trouvé qu'à moitié la solution..
J'ai fait créé une trentaine de DBLink, et il en manquait 1 seul..

Et comme par hazard, c'est sur le compte où le DBLink manquait que mon appli PB pointait ..
Je ne comprends pas par contre, pourquoi ma requête du count(*) ne plantait pas..


Bref c'est résolu, , ma DATAWIndow avec la requête pointant sur le DBLink ne semble plus plantée, mais j'ai toujours un soucis avec l'exécution de ma procédure via le DBLink:

Revoici donc la déclaration et l'exécution de cette procédure:

Code: pb

DECLARE listeCommunes PROCEDURE FOR ssf_rues_pkg.listeCommunes@SSF_LINK;

EXECUTE listeCommunes;  



Le SQLCA.SQLErrtext renvoie cette anomalie là:

ORA-04043: object "PUBLIC".listeCommunes does not exist
ORA-02603: preceding line from SSF_LINK.



Je dois sans doute mal déclarer ma procédure dans le code PB..

Erasorz, as tu déjà exécuté des procédure via le DBLINk depuis PB?

Hors ligne

 

#12 04-06-2009 10:25:04

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Problème DBLink et Powerbuilder

ça ressemble à un synonyme public non créé sur ton package
-> soit tu crées le synonyme

Code: sql

CREATE PUBLIC SYNONYM ssf_rues_pkg FOR UTILISATEUR.ssf_rues_pkg;

-> soit tu ajoutes l'utilisateur qui possède le package :

Code: sql

DECLARE listeCommunes PROCEDURE FOR UTILISATEUR.ssf_rues_pkg.listeCommunes@SSF_LINK;

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#13 04-06-2009 10:48:34

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Problème DBLink et Powerbuilder

Aïe. J'y ai cru , mais non, ça ne marche pas mieux en mettant l'utilisateur devant.

Erreur: ORA-04043: object ssfpub.ssf_rues_pkg does not exist

Pour le synonyme éventuellement à créer, j'y crois pas trop, car depuis un SQL Editeur, je me connecte avec le même compte que pour l'appli PB, et la commande suivante fonctionne bien:

Code: sql

execute ssf_rues_pkg.listeCommunes@SSF_LINK; // Sans utilisateur devant


ou aussi cette commande avec l'utilisateur devant

Code: sql

execute ssfpub.ssf_rues_pkg.listeCommunes@SSF_LINK; // Avec utilisateur devant

Dernière modification par Kalini (04-06-2009 10:51:27)

Hors ligne

 

#14 08-06-2009 12:50:55

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: Problème DBLink et Powerbuilder

Tu pourrais appeler une procedure qui elle meme appelle la procedure sur la base distante


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22