Powerbuilder pour les completement Geeks !

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 18-06-2007 14:57:21

toto  
Membre Geek
Lieu: Nice
Date d'inscription: 21-05-2007
Messages: 23
Pépites: 111
Banque: 0

Caractères transformés dans le SQL

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 :

Code: sql

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 :

Code: sql

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

 

#2 18-06-2007 15:17:33

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Caractères transformés dans le SQL

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:

Code: pb

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;

Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#3 18-06-2007 15:36:55

toto  
Membre Geek
Lieu: Nice
Date d'inscription: 21-05-2007
Messages: 23
Pépites: 111
Banque: 0

Re: Caractères transformés dans le SQL

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

 

#4 18-06-2007 15:54:41

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

Re: Caractères transformés dans le SQL

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)


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

Hors ligne

 

#5 19-06-2007 07:51:22

toto  
Membre Geek
Lieu: Nice
Date d'inscription: 21-05-2007
Messages: 23
Pépites: 111
Banque: 0

Re: Caractères transformés dans le SQL

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

 

#6 19-06-2007 12:48:09

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: Caractères transformés dans le SQL

nous avons eu le meme probleme avec le symbol euro
Il faut ajouter dans DbParm       -->   ,DisableUnicode=1


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

Hors ligne

 

#7 19-06-2007 13:00:53

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Caractères transformés dans le SQL

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...


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#8 22-06-2007 14:02:17

toto  
Membre Geek
Lieu: Nice
Date d'inscription: 21-05-2007
Messages: 23
Pépites: 111
Banque: 0

Re: Caractères transformés dans le SQL

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

 

Pied de page des forums

Propulsé par FluxBB 1.2.22