Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je travaille avec PB10.2.1 et Oracle 8i/Oracle 9i.
Lorsqu'un utilisateur essaye de mettre à jour un champ déclaré en varchar2(xxx) qui contient une apostrophe (simple quote) ET les 2 caractères suivants "->" quelque part après l'apostrophe, le SQL généré n'est pas le bon... ???
Voici ce que saisi l'utilisateur : test de l'avant et -> de l'après
Voici ce que je m'attend à voir passer comme requête SQL, car c'est que génère mon appli PB :
UPDATE kr5."CONNECTOR" SET "DESCR" = 'test de l''avant et -> de l''après' WHERE "IDS_COUNT" = 50 AND "CNX_CODE" = 'J00' AND "SPACECRAFT" = 'KR5' AND "STATUS_CODE" = 'D' AND "SC_VERS_ID" = 999
Voici ce qui arrive sur le serveur Oracle :
UPDATE kr5."CONNECTOR" pb1 SET "DESCR" = 'test de l''avant et pb1.. de l''après' WHERE "IDS_COUNT" = 50 AND "CNX_CODE" = 'J00' AND "SPACECRAFT" = 'KR5' AND "STATUS_CODE" = 'D' AND "SC_VERS_ID" = 999
Je ne comprend pas d'où vient ce pb1... Et la flêche saisie par l'utilisateur à aussi été remplacée !
Pour info, il n'existe nulle part, ni dans l'appli, ni dans les triggers un quelconque mot "pb1".
Je ne sais plus vraiment où chercher, car pour moi, -> n'est pas un caractère particulier comme les caractères d'échappement, ou autres.
Et je n'ai rien trouvé au niveau Oracle non plus.
De plus, ce qui me surprend, c'est que ça à l'air d'être traité comme un alias, mais alors pourquoi ce fonctionnement ???
Je vous remercie par avance pour vos lumières.
Bernard
Hors ligne
Bonjour,
En PB, la chaîne de caractères "->" est destinée à effectuer des assignations pour certains types de méthodes
(ex: AddGlobalRef).
Pour contourner le problème, je te suggères d'utiliser la fonction Char:
string ls_test ls_test = 'test de l''avant et ' + char(45) + char(62) + ' de l''après' UPDATE kr5."CONNECTOR" pb1 SET "DESCR" = :ls_test WHERE "IDS_COUNT" = 50 AND "CNX_CODE" = 'J00' AND "SPACECRAFT" = 'KR5' AND "STATUS_CODE" = 'D' AND "SC_VERS_ID" = 999 USING SQLCA;
Hors ligne
Merci pour ta réponse, mais en fait, je ne peux pas m'amuser à analyser tout ce qu'écrivent les utilisateurs dans les zones déclarées en varchar2, car il ne s'agit pas du contenu d'une variable, mais de ce qu'a écrit l'utilisateur.
Actuellement, la solution de contournement est soit de ne pas saisir de -> après une apostrophe, soit d'intercaler un blanc comme - > , soit de ne pas saisir de flêche...
Par contre, je vais regarder ce que tu indiques, car je ne connaissais pas cette notion.
Bernard
Hors ligne
toto a écrit:
Merci pour ta réponse, mais en fait, je ne peux pas m'amuser à analyser tout ce qu'écrivent les utilisateurs dans les zones déclarées en varchar2, car il ne s'agit pas du contenu d'une variable, mais de ce qu'a écrit l'utilisateur.
Bonjour, est-ce via une datawindow que tu fais l'update ? le cas échéant et si tu as un objet ancêtre tu peux éventuellement y coder un "global replace" de "->" vers char(45) + char(62)
Hors ligne
Bonjour,
oui, les Update se font à partir de datawindows dans les cas qui m'intéressent.
Mais si je code une modif de ce genre, j'ai peur que ça ralentisse le fonctionnement de l'appli...
Sinon, d'après toi, à quel endroit vaudrait-il mieux coder ce genre de remplacement, afin que ce soit optimum en terme de temps de réponse (par rapport aux lignes modifiées, aux colonnes modifiées, à chaque changement de valeur, etc...)
Merci,
Bernard
Hors ligne
nous avons eu le meme probleme avec le symbol euro
Il faut ajouter dans DbParm --> ,DisableUnicode=1
Hors ligne
JCZ a écrit:
nous avons eu le meme probleme avec le symbol euro
Il faut ajouter dans DbParm --> ,DisableUnicode=1
Bonne remarque de JCZ,
On a dû aussi rajouter cette option quand nous sommes passés de la 9 à la 10.5 car ça mettait un boxon pas possible sur pas mal de choses.
Je n'ai pas pensé que le problème pouvait également se poser en 10.2 car je n'ai jamais bossé sur celle-ci, mais effectivement, ça pourrait bien être ça.
Si Bernard pouvait nous confirmer...
Hors ligne
Merci pour ta réponse JCZ, je vais essayer ça dès que possible.
Effectivement, ça pourrait simplifier pas mal de choses...
Je ferai un retour ici, quelque soit le résultat.
Bernard
-----------------------
Résultat du test :
He ben non, ça ne marche toujours pas... J'ai toujours le même fonctionnement...
Quand je tape "Bat l' tery1 positive lines", il m'écris en BDD "Bat l' tery1 pb1.. positive lines"
Pour le moment, à part ma solution de contournement, je ne vois rien d'autre...
Dernière modification par toto (22-06-2007 14:07:35)
Hors ligne