Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Je me trouve devant un petit problème dont je ne vois pas qu'elle est la cause. Je met donc à profit vos neurones pour m'aider à avancer sur mon projet
J'ai donc une procédure stockée qui prend en entée un bon nombre de paramètres (4 en entrée --> les clauses where, 11 en sortie --> les champs du select).
Je compile ma procédure stockée pour l'integrer dans ma base de données.
Je code ensuite le script Pb pour appeler ma procédure :
declare proc_stockee for RECH_PARU @as_ch1 = :l_s_ch1 ,@as_ch2 = :l_s_ch2 ,@ai_ch3 = :l_l_ch3 ,@as_ch4 = :l_s_ch4 ,@ai_ch5 = :l_i_ch5 ,@as_ch6 = :l_s_ch6 ,@as_ch7 = :l_s_ch7 ,@as_ch8 = :l_s_ch8 ,@as_ch9 = :l_s_ch9 ,@ai_ch10 = :l_l_ch10 ,@as_ch11 = :l_s_ch11 ,@ai_ch12 = :l_l_ch12 ,@as_ch13 = :l_s_ch13 ,@as_ch14 = :l_s_ch14 ,@ad_ch15 = :l_dt_ch15 Using SQLCA; execute proc_stockee; MessageBox("Debug", SQLCA.SQLCode) If SQLCA.SQLCode = 100 Then // On a pas pu trouver de parution précédente MessageBox("Debug","Pas de parution precedente") End If
En testant la procédure sous mon application Pb j'ai le code retour 100 (pas d'enregistrement retourné).
Je teste donc la requete sous SQL Advantage en renseignant les même paramètres d'entrées que pour mon cas de test sur l'appli Pb (j'ai fait un affichage des variables juste avant d'appeler la proc). Et à ma grande surprise je m'apperçois que ma procédure stockée fonctionne très bien et qu'elle me renvoie le résultat que j'attendais.
Je ne voit donc pas trop pourquoi sous Pb la requete ne me renvoie aucune ligne.
Y'a t'il un moyen d'afficher la requete crée lors de l'appel de la procédure stockée pour pouvoir debugger plus facilement?
Voyez vous d'autres incohérences que je n'aurais pas vu?
Merci d'avance pour vos reponses.
On commence les recompenses avec un petit sac de 10 pépites pour la première bonne réponse
Dernière modification par Nephtis (06-08-2007 08:08:09)
Hors ligne
Je ne comprends pas bien ton code
Voila comment je fais
Declare PROC_XXX Procedure For P_XXX( :is_entre1, :is_entre2, :is_entre3, :is_entre4) USING SQLCA; EXECUTE PROC_XXX ; ll_sqlcode = sqlca.sqlcode ls_SQLErrText = SQLCA.SQLErrText IF ll_sqlcode <> -1 THEN FETCH PROC_XXX iNTO :ls_sortie1,:ls_sortie2,:ls_sortie3,:ls_sortie4,:ls_sortie5,:ls_sortie6; END IF CLOSE PROC_XXX;
Tu peux recuperer la requete passée à la base de données en metant 'trace ' devant la chaine du DBMS
exemple sqlca.dbms = "trace O84 ORACLE v8.4"
Dernière modification par JCZ (03-08-2007 09:17:33)
Hors ligne
Voila le code de ma procédure stockée :
Create Proc RECH_PARU( @as_i_ch1 varchar(4), @as_i_ch2 varchar(2), @ai_i_ch3 integer, @as_i_ch4 varchar(6), @ai_o_ch5 integer output, @as_o_ch6 varchar(4) output, @as_o_ch7 varchar(30) output, @as_o_ch8 varchar(6) output, @as_o_ch9 varchar(1) output, @ai_o_ch10 integer output, @as_o_ch11 varchar(30) output, @ai_o_ch12 integer output, @as_o_ch13 varchar(1) output, @as_o_ch14 varchar(1) output, @ad_o_ch15 date output ) As Begin SELECT [...] End
Par contre comment savoir sur quelle type de base de donnée on travaille (je sais que c'est celle de SYBASE mais j'aimerais bien savoir comment on le retrouve dans les menus de configuration de PB)
Comme ça je pourrais tester le sqlca.trace.
PS : Je suis sous PB 6.5
Hors ligne
Ok j'ai compris ma syntax est pour oracle ...
tu as un icone 'DB profile'
puis 'edit...' puis 'preview'
Dernière modification par JCZ (03-08-2007 09:32:40)
Hors ligne
declare proc_rech_rev_pre procedure for OBI_S_REV_PRECEDENT(:l_s_code_titre, :l_s_extension_titre, :l_l_soc_mess_titre, :l_s_id_parution) USING SQLCA; EXECUTE proc_rech_rev_pre;
J'ai modifié légèrement l'appel de la procédure stockée pour imiter ta façon de faire mais j'ai le code sql retour -1 avec le message d'erreur
Incorrect synthax near '('
Je teste le sqlca.dbms = "trace SYC Sybase System 10/11" tout de suite
Quand on a modifié sqlca.dbms, comment recupère t'on la trace?
Dernière modification par Nephtis (03-08-2007 09:43:09)
Hors ligne
le message est normal
Ma syntax est pour oracle
tu auras un message indiquant l'endroit du fichier de log
Hors ligne
JCZ a écrit:
tu auras un message indiquant l'endroit du fichier de log
Un messagebox? Parce que je n'ai pas vu de nouveaux messages apparaitre
Pour rajouter le trace j'ai codé comme ceci :
SQLCA.dbms = "trace SYC Sybase System 10/11"
Est ce que c'est bon?
Hors ligne
le fichier doit s'appeler pbtrace.log et doit se trouver dans c:\winnt\...
Je n'utilise plus la version 6.5 il n'y avait peut etre pas de message à l'epoque
Je crois que tu as aussi une option dans l'ongle "options" avec le fichier log a specifié ...
Hors ligne
JCZ a écrit:
le fichier doit s'appeler pbtrace.log et doit se trouver dans c:\winnt\...
Je crois que tu as aussi une option dans l'ongle "options" avec le fichier log a specifié ...
Je suis sous XP donc j'ai recherché le fichier pbtrace.log dans C:\Windows et je ne l'ai pas trouvé
Par contre est ce que tu peut préciser un peu plus où se trouve l'onglet "options" (dans le 'preview' du DBProfile?)
Dernière modification par Nephtis (03-08-2007 10:07:37)
Hors ligne
c'est un onglet "options" dans 'DBProfile'
Hors ligne
Bon y'a pas d'onglet "options" ou de champ contenant un repertoire dans les différents onglets
Mais bon voila quand même 10 pépites pour tes reponses
On passe à 20 pépites pour trouver une solution à mon problème
Hors ligne
Cela depend peut etre de la base de données et du driver utilisé
tu as peut etre une case à cocher 'generate trace' ?
Je ne peux pas regarder avec SYC Sybase ...
Hors ligne
Il y avais effectivement une case à cocher "Générer suivi" qui m'a bien précisé que la log se trouvera dans C:\Windows\pbtrace.log
Seulement ce fichier ne me donne vraiment pas beaucoup d'informations
/*---------------------------------------------------*/
/* 03/08/2007 12:55 */
/*---------------------------------------------------*/
DIALOG CONNECT TO TRACE SYC Sybase System 10/11:
LOGID=*******
SERVER=********
DATA=***
SRV 10 #5701 Changed database context to '*****'. (0 MilliSeconds)
SRV 10 #5701 Changed database context to '*****'. (0 MilliSeconds) (94 MilliSeconds)
Ce qui correspond juste au fait que je me connecte avec ce nouveau profil
Dernière modification par Nephtis (03-08-2007 11:06:33)
Hors ligne
Nephtis,
Petite question, es-tu sur le même serveur entre ton PB et ton SQL Advantage et est-ce que tu utilises le même compte ( => prob de grant) ?
Hors ligne
Chrnico a écrit:
Probleme de grant?
je fait un grant all pour la compilation de ma procédure, normalement ça devrait aller
Pour ce qui est de la base de données je suis sur d'être sur le même serveur. Par contre faut que je revoie si le type du compte avec lequel je me connecte.
J'utilise une table qui n'est accessible que pour un certain type de compte (je l'ai remarque sous SQL Advantage parce que quand j'essayais d'executer ma procédure il me jettait violament en me disant quelque chose de la sorte "Votre connexion a été interompue ...")
Bon week end à tous
Dernière modification par Nephtis (03-08-2007 16:11:44)
Hors ligne
Bon j'ai testé la procédure en l'applicant à une datawindow et j'ai eu un joli message d'erreur comme quoi il n'arrivait pas a caster un varchar en date.
Et puisque je me suis décidé de passer par les datawindow (plutot datastore parce que je veut juste recupérer quelques données), j'ai modifié ma procédure stockée pour ne plus avoir de champ en sortie (output)
Problème résolu
Pour les vingt pépites je les divise entre Chrnico et JCZ
Dernière modification par Nephtis (06-08-2007 08:09:15)
Hors ligne