Troncation à droite de la chaine de données

Troncation à droite de la chaine de données - ASP - Programmation

Marsh Posté le 08-08-2005 à 09:06:50    

Bonjour
j'ai un petit soucis avec le traitement d'un formulaire.
En gros ce formulaire, permet d'enregistrer des personnes(nom, prénom, tel, mob, fax, mail) ainsi que leur fonction (2 listes déroulantes + une zone de texte).
Une personne peut avoir plusieurs fonctions.
 
Le problème vient justement de là : quand j'enregistre une personne avec 3 fonctions j'ai l'erreur suivante :  
 
Type d'erreur :
Microsoft OLE DB Provider for ODBC Drivers (0x80040E57)
[Microsoft][ODBC SQL Server Driver]Troncation à droite de la chaîne de données
/red0.asp, line 494
 
 
Type de navigateur :
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)  
 
Page :
POST 164 bytes to /red0.asp
 
POST Data:
ind=2&civ=M&nom=TEST&prenom=Test&tel1=&tel2=&tel3=&mail=&fct=5&dom=2&libelle_fct=&fct1=18&dom1=3&libelle_fct1=&fct1=19&dom1=4&libelle_fct1=&nvx=Nouvel+interlocuteur
 
 
cette erreur je ne l'ai pas quand j'enregistre une personne avec une ou deux fonctions.
 
est ce que la chaine qu'on envoie dans l'URL est limitée en taille ??

Reply

Marsh Posté le 08-08-2005 à 09:06:50   

Reply

Marsh Posté le 08-08-2005 à 09:49:04    

et as tu regardé ce qui se passe à la ligne 494 ?????
avant poster sur le forum, regarde ton code à cette ligne essaye de débugger.
 
T1
 
et on peut avoir le code justement là ou ca foire ?

Reply

Marsh Posté le 08-08-2005 à 10:32:32    

désolé j'ai oublié de mettre le code !
mais ça fait tellement longtemps que je butte sur ce bug que je commence à tourner en rond
 
en fait la ligne 494 c'est là ou s'éxecute la procédure stockée (Cmd.execute)
 

Code :
  1. for cptFct=0 to ubound(tabFctSup)
  2.     DomCourant=cLng(tabDomSup(cptDom))
  3.     FctCourant=cLng(tabFctSup(cptFct))
  4.     FctLibCourant=tabLibFctSup(cptFct)
  5.     if FctCourant<>"" then
  6.        Cmd.CommandText="procInsertPers_A_Fct"
  7.        Cmd.CommandType =4
  8.        Cmd.execute ,array(idPersonne,FctCourant,DomCourant,FctLibCourant,session("nom_coll" ))
  9.      end if
  10. next


 
La boucle for sert à récupérer toutes les données.
Lors du premier passage dans la boucle, les données qui sont envoyées à la procédure stockée procInsertPers_A_Fct sont les suivantes :
21061, 18, 3, Précision sur la fonction, MAES EDITH


Message édité par dooggie le 08-08-2005 à 10:33:18
Reply

Marsh Posté le 08-08-2005 à 10:42:25    

en gros la réponse est :  
on va pas pouvoir t'aider aussi facilement  
 
mais tu récupère les valeurs libelle_fct1 et  autre de quelle manière ? un request("libelle_fct1 " )
tu as regardé ce que ca donne un request de "libelle_fct1" lorsqu'il y a plusieurs libelle_fct1 dans le POST ??
ben ca donne :  
libelle_fct1,libelle_fct1,libelle_fct1  
 
donc il  y a peut etre un traitement à faire ici, et peut etre que ta fonction bloque du à une redondance des données

Reply

Marsh Posté le 08-08-2005 à 10:55:39    

en fait je suis en stage et je bosse sur une appli déjà existante.
et la récupération des données ce n'est pas moi qui l'ai faite, mais elle fonctionne comme ça :
 

Code :
  1. tabDomSup=split(Request.Form("dom1" ),"," )
  2. tabFctSup=split(Request.Form("fct1" ),"," )
  3. tabLibFctSup=split(Request.Form("libelle_fct1" ),"," )


 
bien sur, avant que j'y touche ça marchait nickel ;o)
mais bon je dois quand même faire ces modifs (enregistrement des fonctions dans une table différente de la table personne)

Reply

Marsh Posté le 08-08-2005 à 11:28:32    

en gros tu as des tableaux à l'arrivée
mais peut etre que la fonction dans laquelle tu fous un tableau ne récupère pas tout
 
analyse mieux ton problème. et en mettant des response.write un peu partout
l'asp c'est chiant à débugguer, ya pas les msg d'erreur comme sur PHP.
m'enfin ils sont moins visibles on va dire.
 
 

Reply

Marsh Posté le 08-08-2005 à 11:43:29    

Citation :


mais peut etre que la fonction dans laquelle tu fous un tableau ne récupère pas tout


 
peut être ben que oui, peut être ben que non
mais t'as raison, faut analyser le code, encore et encore
 
par contre ma question du début reste sans réponse :
est ce que la chaine qu'on envoie dans l'URL est limitée en taille ??

Reply

Marsh Posté le 08-08-2005 à 11:46:09    

ben si tu fais du GET avec IE c'est limité ) 2048 caractères je crois
et si tu fais du POST tu n'es pas limité
et apparament tu fais du POST
 
faut éviter d'envoyer un formulaire en GET, à moins que tu aies quelque chose de précis à faire

Reply

Marsh Posté le 08-08-2005 à 11:58:54    

je confirme, c'est bien du POST que je fais

Reply

Marsh Posté le 08-08-2005 à 13:21:21    

Serait-il possible que tu essayes d'obtenir des champs dont l'un au moins contient une ou plusieurs virgules en trop ?
Dans ce cas, il faudrait revoir tes split.

Reply

Marsh Posté le 08-08-2005 à 13:21:21   

Reply

Marsh Posté le 08-08-2005 à 15:13:03    

Citation :

Serait-il possible que tu essayes d'obtenir des champs dont l'un au moins contient une ou plusieurs virgules en trop ?
Dans ce cas, il faudrait revoir tes split.


 
Désolé olivthill, mais je ne comprens pas ce que tu veux...
 
tu voudrais que je vérifie le contenu des champs dom1, fct1 et libelle_fct1, c'est ça ?
si c'est ça, voila ce que j'ai :
 
Request.Form(dom1): 3, 4
Request.Form(fct1): 18, 19
Request.Form(libelle_fct1): Précision sur la fonction, Précision sur la fonction

Reply

Marsh Posté le 08-08-2005 à 17:11:10    

un petit up de fin de journée ;o)

Reply

Marsh Posté le 08-08-2005 à 21:04:24    

Le code qui est montré n'est que parcellaire et je ne connais ASP que partiellement, donc je peux dire des c../betises.
 
Cependant, je ne vois pas pourquoi il faudrait se focaliser sur la longueur des paramètres GET et POST, bien que cela cause souvent des soucis, puisque l'erreur se produit sur la ligne 494 qui est, si j'ai bien compris :

Cmd.execute ,array(idPersonne,FctCourant,DomCourant,FctLibCourant,session("nom_coll" ))


Ce message provient d'Ole ou d'ODBC, et donc a un rapport avec une base de données, et il indique qu'au moins un des paramètres est plus long que prévu.
 
Les paramètres viennent apparemment d'un formulaire par une méthode POST. Il faudrait vérifier qu'il arrivent en bon état. J'ai l'intuition qu'ils passent bien, et que le problème se situe juste après lorsque les paramètres sont sortis du header POST pour être mis dans idPersonne, etc.
 
D'après l'autre bout de code, il semble que le parsing (ou parsage :whistle: ) se fait avec split(machin, "," ) autrement dit, on coupe à chaque virgule. Donc, imaginons que les données contiennent une vrigule de moins ou de trop, et patratas, les données sont mal parsaussissonnées. Mais, c'est juste une hypothèse pour faire avancer le schimilishmilblick.

Reply

Marsh Posté le 09-08-2005 à 09:38:02    

Merci pour ces idées.
 
La longueur des arguments j'y ai déjà pensé.
Je ne pense pas avoir de problème de ce côté : ma procédure stockée procInsertPers_A_Fct insert des données dans la table Pers_A_Fct qui contient 5 champs
id_pers, id_int, id_domaine de type int
descr_fct : varchar de 150  
createur : nvarchar de 70
Ces deux derniers champs sont censés être remplis avec les chaine suivantes : 'Précision sur la fonction' et 'MAES EDITH'
donc à priori le problème n'est pas trop de ce côté
 
par contre, c'est vrai qu'un problème avec le split n'est pas impossible...
 
y a moyen de faire des temporisations en ASP (comme en VB avec l'objet Timer) afin d'afficher le contenu des variables qui sont modifiées dans une boucle ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed