Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Est-il possible d’appeler une procédure stockée qui retourne un curseur (ou plusieurs) en utilisant une connexion OLEDB ?
Pour info je travaille avec une base de données ORACLE 8.1.7 et Powerbuilder 12 Classic.
De plus j'utilise ce code avec le client oracle 9i et cela fonctionne :
do while (ll_pos < gl_iter) and (lb_iter = true) declare DONNE_DER_ETAT_ET_MVT procedure for GPAO_ETIQUETTE.DONNE_DER_ETAT_ET_MVT (:as_eti) using SQLCA; EXECUTE DONNE_DER_ETAT_ET_MVT; FETCH DONNE_DER_ETAT_ET_MVT INTO :ls_etat, :ls_mouvement; CLOSE DONNE_DER_ETAT_ET_MVT; ls_tmp = String(SQLCA.SqlCode) if SQLCA.SqlCode = 0 then lb_iter = false end if ll_pos ++ loop
Si quelqu'un pouvais me donnée la syntaxe à utiliser avec OLEDB....
Merci d'avance
Dernière modification par Ben53 (06-10-2010 14:35:29)
Hors ligne
Salut,
1 > Quelle erreur as tu ?
2 > Quel driver OLEDB utilise tu ?
3 > J'ai un souvenir ( je ne sais pas si celà est toujours vrai ) qu'il y avait un problème sur ORACLE 8i pour retourner plusieurs result Set en OLEDB.
Hors ligne
1- J'ai l'erreur : "Procedure has not been executed or has no results"
2- Param de connexion : PROVIDER='OraOLEDB.Oracle',DATASOURCE='TOTO_DEV',DecimalSeparator=',',DelimitIdentifier='No',PBCatalogOwner='POWERB',CommitOnDisconnect='No',DisableBind=0
J'ai essayer aussi ce genre de syntaxe
FUNCTION String DONNE_MENU_OPE(string bfope) RPCFUNC ALIAS FOR "GPAO_SUIVI_ACT_ILOTS.DONNE_MENU_AUTORISE_OPERATION"
Merci
Hors ligne
Salut,
Je te relance car j'ai fait quelques tests et que j'ai pu utiliser l'OLEDB avec PB12. Je dois te dire que je ne suis pas dans la même configuration que toi.
Es-tu sur de renvoyer 1 resultset car moi j'ai eu la même erreur lorsque ma SP ne renvoyait rien et que je faisait le CLOSE de la PROC.
Le CLOSE ne devant être utilisé que si possibilité de faire un fetch du resultSet.
Après le EXECUTE je test si code = 0 alors fetch et close sinon je ne fais rien. ( je sais que tu as dis que celà fonctionne avec le client ORACLE mais ton test est il effectué avec le même paramètre)
Hors ligne
Ma procédure stockée renvoi un curseur de deux champs, donc pas de problèmes de ce coté...
Utilise tu une base de données oracle ?
C'est sympa de t’attarder sur mon problème en tout cas... n'ayant toujours pas trouvé de solution...
Hors ligne
Ben53 a écrit:
Bonjour,
Est-il possible d’appeler une procédure stockée qui retourne un curseur (ou plusieurs) en utilisant une connexion OLEDB ?
Pour info je travaille avec une base de données ORACLE 8.1.7 et Powerbuilder 12 Classic.
De plus j'utilise ce code avec le client oracle 9i et cela fonctionne :Code: pb
do while (ll_pos < gl_iter) and (lb_iter = true) declare DONNE_DER_ETAT_ET_MVT procedure for GPAO_ETIQUETTE.DONNE_DER_ETAT_ET_MVT (:as_eti) using SQLCA; EXECUTE DONNE_DER_ETAT_ET_MVT; FETCH DONNE_DER_ETAT_ET_MVT INTO :ls_etat, :ls_mouvement; CLOSE DONNE_DER_ETAT_ET_MVT; ls_tmp = String(SQLCA.SqlCode) if SQLCA.SqlCode = 0 then lb_iter = false end if ll_pos ++ loop
Si quelqu'un pouvais me donnée la syntaxe à utiliser avec OLEDB....
Merci d'avance
Le close ne devrait-il pas être sorti de la boucle ?
Hors ligne
Bonjour,
Je n'ai toujours pas résolu le problème, même en sortant le close de a boucle effectivement....
Toujours une erreur d'exécution de procédure...
Des idées ?
Merci....
Hors ligne
Bonjour,
Il faudrait tester le sqlca.sqlcode
apres le fetch et apres l'instruction execute
et afficher la variable sqlca.sqlerrtext.
Hors ligne
J'ai fait ceci :
do while (ll_pos < gl_iter) and (lb_iter = true) declare DONNE_DER_ETAT_ET_MVT procedure for GPAO_ETIQUETTE.DONNE_DER_ETAT_ET_MVT (:as_eti) using SQLCA; EXECUTE DONNE_DER_ETAT_ET_MVT; ls_error_cod = String(SQLCA.SqlCode) //--> -1 ls_err_txt = String (SQLCA.sqlerrtext) //--> Can not get parameters of procedure GPAO_ETIQUETTE.DONNE_DER_ETAT_ET_MVT. FETCH DONNE_DER_ETAT_ET_MVT INTO :ls_etat, :ls_mouvement; ls_error_cod = String(SQLCA.SqlCode) //--> -1 ls_err_txt = String (SQLCA.sqlerrtext) //--> Cursor is not open if SQLCA.SqlCode = 0 then lb_iter = false end if ll_pos ++ loop CLOSE DONNE_DER_ETAT_ET_MVT;
Les valeurs des variables sont dans le code.
J'ai vu qu'il y avait cette syntaxe pour le declare qui existait :
declare DONNE_DER_ETAT_ET_MVT procedure for GPAO_ETIQUETTE.DONNE_DER_ETAT_ET_MVT @Etiquette =:as_eti using SQLCA;
Hors ligne