Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1118 connectés 

  FORUM HardWare.fr
  Programmation
  ASP

  Troncation à droite de la chaine de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Troncation à droite de la chaine de données

n°1172102
dooggie
Posté le 08-08-2005 à 09:06:50  profilanswer
 

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

mood
Publicité
Posté le 08-08-2005 à 09:06:50  profilanswer
 

n°1172123
gatsusat
Posté le 08-08-2005 à 09:49:04  profilanswer
 

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 ?

n°1172170
dooggie
Posté le 08-08-2005 à 10:32:32  profilanswer
 

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
n°1172190
gatsusat
Posté le 08-08-2005 à 10:42:25  profilanswer
 

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

n°1172205
dooggie
Posté le 08-08-2005 à 10:55:39  profilanswer
 

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)

n°1172233
gatsusat
Posté le 08-08-2005 à 11:28:32  profilanswer
 

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.
 
 

n°1172249
dooggie
Posté le 08-08-2005 à 11:43:29  profilanswer
 

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

n°1172252
gatsusat
Posté le 08-08-2005 à 11:46:09  profilanswer
 

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

n°1172270
dooggie
Posté le 08-08-2005 à 11:58:54  profilanswer
 

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

n°1172332
olivthill
Posté le 08-08-2005 à 13:21:21  profilanswer
 

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.

mood
Publicité
Posté le 08-08-2005 à 13:21:21  profilanswer
 

n°1172470
dooggie
Posté le 08-08-2005 à 15:13:03  profilanswer
 

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

n°1172652
dooggie
Posté le 08-08-2005 à 17:11:10  profilanswer
 

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

n°1172838
olivthill
Posté le 08-08-2005 à 21:04:24  profilanswer
 

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.

n°1172938
dooggie
Posté le 09-08-2005 à 09:38:02  profilanswer
 

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 ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASP

  Troncation à droite de la chaine de données

 

Sujets relatifs
[RESOLU] VB/EXCEL/manipulation de données pour transfert MySqlmanipulation de chaine en requete SQL.
Convertir une chaine en hex ?probleme de chaine de caractère ( photo inside)
recherche de données d'une bd via un formulairerecherche de données d'une bd via un formulaire
[résolu] Générer aléatoirement des donnéesGénérer aléatoirement des données
Creation d'un tableau avec données issues de BDD AccessGridView (dataGrid) et affichage des données
Plus de sujets relatifs à : Troncation à droite de la chaine de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR