Limitation cfquery à 255 car par variable contenant le sql

Résolu
abmail Messages postés 20 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 8 juin 2012 - 22 sept. 2009 à 13:16
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013 - 5 oct. 2009 à 15:52
Bonjour,
ci joint le probleme que je rencontre :

En gros, je ne comprend pas pourquoi cf me tronque ma variable "varsql" qui contient l'instruction sql (issue d'une base de donnees)

exemple :

1er cas qui fonctionne !

<cfset varsql "select * from matable where id 251111">
<CFQUERY NAME="myrequete" DATASOURCE="#BaseSQL#">
#varsql#
</CFQUERY>

Dès lors que la longueur de "varsql" est inferieur à 255 caracteres cela fonctionne

maintenant si dans "varsql" je mets une requete de plus de 255 car :

<cfset varsql "SELECT [___COUPONS_RECUS.ID] FROM [___COUPONS_RECUS], [Prospect] where ([___COUPONS_RECUS.NUMCOUPON] [Prospect.NUMCOUPON] ) AND ((len(trim([___COUPONS_RECUS.civilite1])) > 0 and len(trim([___COUPONS_RECUS.civilite2])) > 0) or (len(trim([___COUPONS_RECUS.civilite1])) > 0 and len(trim([___COUPONS_RECUS.civilite2])) = 0)) AND ( [prospect.statut] = 'PROSPECT' OR [prospect.statut] = 'CLIENT A CONFIRMER' OR [prospect.statut] IS NULL) AND ([___COUPONS_RECUS.CAB] = 'FLD' ) AND len(trim([prospect.email])) > 0 ">

1/ j'affiche "varsql" par cfoutput = j'ai la requete entiere

2/ j'execute la requete via cfquery

<CFQUERY NAME="myrequete" DATASOURCE="#BaseSQL#">
#varsql#
</CFQUERY>

il me créé une erreur du genre :

[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression '([___COUPONS_RECUS.NUMCOUPON] = [Prospect.NUMCOUPON] ) AND ((len(trim([___COUPONS_RECUS.civilite1])) > 0 and len(trim([___COUPONS_RECUS.civilite2])) > 0) or (len(trim([___COUPONS_RECUS.civilite1])) > 0 and len(trim([___COUPONS_RECUS.civilite2])) = 0)) AND ( '.

En fait, cfquery tronque la variable "varsql" à 255 car et bien entendu cette variable tronqué (imcomplete donc) plante l'odbc et genere l'erreur.

je confirme que cette meme requete "copier/coller" directement dans le cfquery fonctionne parfaitement, il ne s'agit pas la d'une erreur de syntaxe sql mais bel et bien que cfquery tronque ma variable a 255 car.

Est ce quelqu'un a eu ce cas et est ce que c'est possible d'y remedier ?

pour info, j'utilise mx7 sur iis6

merci de votre aide

5 réponses

abmail Messages postés 20 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 8 juin 2012 1
5 oct. 2009 à 08:58
Bonjour et merci de vos reponses,
apres avoir bien galéré sur ce probleme et avoir testé multes fois mes requetes sql via access, je me suis donc rendu compte que le probleme ne venait pas du tag CFQUERY et l'affichage de la variable varsql via cfoutput ni meme de la requete elle-meme (avant cfoutput).

En fait le probleme est que cf me double les simple quote et genere logiquement une erreur sql que j'ai enfin pu réglé grace a la fonction "PreserveSingleQuotes"

voila je pense que ce post est clos et je vous remercie encore de m'avoir epauler sur ce probleme.

bonne journee a tous
3
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
23 sept. 2009 à 08:16
C'est bizarre ça, ça voudrait dire que le CFQuery tronque à 255 toutes variables de type string ? Perso ça me laisse dubitatif mais on ne peut présager de rien..
As-tu essayer de découper ta string et de ré-intégrer tes morceaux de string en les concaténant dans ton CFQuery ??
Le mystère s'épaissit..
S.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
3 oct. 2009 à 19:27
Bonjour,

c'est le message de l'erreur qui est tronqué et non ton SQL. A mon avis tu as effectivement une erreur dans ton SQL. As tu essayé la query dans Access ?


Nickadele
non, ma belle ne s'appel pas Adèle
Mon Blog
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
5 oct. 2009 à 09:12
Grrr !! Ben alors.. on nous met sur une fausse piste ??
Face à une erreur on doit toujours décomposer les éléments en traitement.
Allez hop, tu as le droit d'accepter ta réponse, ça peut toujours aider quelqu'un.
S.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
5 oct. 2009 à 15:52
Ben voilà,

En résumé, il y avait bien une erreur au niveau du SQL.
C'est un fait que ce problème de simple quote peut-être un soucis et peux mener à des recherches pendanst des heures voir des jours.
Pour éviter ce genre de problème, pour ma part je travaille toujours avec les paramètres (cfqueryparam). L'avantage c'est que CF se charge lui même de mettre les quotes là ou il en faut.


Nickadele
non, ma belle ne s'appel pas Adèle
Mon Blog
0
Rejoignez-nous