Longueur maximale string [Résolu]

blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention - 3 oct. 2006 à 09:54 - Dernière réponse : blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention
- 3 oct. 2006 à 16:18
Bonjour,

j'ai un probleme avec une de mes fonctions vba: je veux qu'elle me renvoie une chaine de caracteres, et tout se passe bien sauf quand la chaine depasse une certaine longueur, auquel cas la fonction ne me renvoie que les 292 premiers caracteres. J'imagine que c'est du a une limitation du type de données string. J'ai lu qu'il existait 2 types de string, un a longueur fixe et l'autre variable. Y a-t'il une difference dans la facon de déclarer? Comment contourner le probleme?

Merci!
Afficher la suite 

14 réponses

Répondre au sujet
blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention - 3 oct. 2006 à 16:18
+1
Utile
finalement j'ai trouvé la solution. effectivement ma chaine etait correcte, mais je ne savais pas que le buffeur des espions etait limité, car c'etait uniquement un affichage. en testant plutot par un debug.print tout y est....... tout bête, mais quand on sait pas...

Voila, merci a tous pour votre aide
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de blanchoc
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 3 oct. 2006 à 10:07
0
Utile
Salut,


Si je ne me trompe pas








Dim StrFixe As String * 5  'Déclaration d'une chaine de longueur fixe 5 Caractere
Dim StrVar As String  'Déclaration d'une chiane de longueur variable.
 







<small> Coloration syntaxique automatique [AFCK]</small>

       





Je pense que si tu peux nous donner la fonction qui cloche ainsi que des exemples ou elle "foire" cela serait pas mal.
@+,   Ju£i?n
Commenter la réponse de jrivet
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 3 oct. 2006 à 10:17
0
Utile
Je confirme Julien

Blanchoc, le bout de code (avec les déclarations ) qui pose problème nous aiderais à comprendre un peu mieux je pense.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention - 3 oct. 2006 à 10:21
0
Utile
c'est une fonction pour ecrire une requete sql


<hr />

Function creerChaineConnexion2(table1, colonnes1, table2, colonnes2, whereCol1, _
whereOp1, whereVal1, whereCol2, whereOp2, whereVal2, joinCol1, joinCol2, orderbyCol) As String
Dim selectCmd, fromCmd, whereCmd1, whereCmd2, joinCmd, orderbyCmd As StringIf (table1 "") Or (colonnes1 "") Then
    MsgBox "Votre requete est incorrecte,veuillez selectionner au moins un fichier et une colonne!"
Else
    selectCmd = "SELECT [" & table1 & "$]." & colonnes1 & " "
    fromCmd = "FROM [" & table1 & "$] "

    If (whereCol1 <> "") And (whereOp1 <> "") And (whereVal1 <> "") Then
    whereCmd1 = "WHERE [" & table1 & "$]." & whereCol1 & " " & whereOp1 & " '" & whereVal1 & "' "
    End If
   
    If (whereCol2 <> "") And (whereOp2 <> "") And (whereVal2 <> "") Then
    whereCmd2 = "AND [" & table2 & "$]." & whereCol2 & " " & whereOp2 & " '" & whereVal2 & "' "
    End If
   
    If (joinCol1 <> "") And (joinCol2 <> "") Then
    joinCmd = "INNER JOIN [" & table2 & "$] ON [" & table1 & "$]." & joinCol1 & "=[" & table2 & "$]." & joinCol2 & " "
    End If
   
    If (orderbyCol <> "") Then
    orderbyCmd = "ORDER BY " & orderbyCol
    End If
   
    creerChaineConnexion2 = selectCmd & fromCmd & joinCmd & whereCmd1 & whereCmd2 & orderbyCmd

End If

End Function

<hr />
toutes mes chaines intermediaires contiennent bien ce qu'il faut, mais plus la concatenation.
voila ce que j'ai comme resultat de la fonction:"SELECT [BDD_RegionOrganismes$].ENTETE_REGION_ORGANISMES,ENTETE_PAYS FROM [BDD_RegionOrganismes$] INNER JOIN [BDD_PaysISO$] ON [BDD_RegionOrganismes$].ENTETE_PAYS=[BDD_PaysISO$].ENTETE_PAYS WHERE [BDD_RegionOrganismes$].ENTETE_REGION_ORGANISMES = 'AEL'"

alors que je devrai avoir:

"SELECT [BDD_RegionOrganismes$].ENTETE_REGION_ORGANISMES,ENTETE_PAYS FROM [BDD_RegionOrganismes$] INNER JOIN [BDD_PaysISO$] ON [BDD_RegionOrganismes$].ENTETE_PAYS=[BDD_PaysISO$].ENTETE_PAYS WHERE [BDD_RegionOrganismes$].ENTETE_REGION_ORGANISMES = 'AELE' AND [BDD_PaysISO$].ENTETE_PAYS = 'CHE' "

Merci
Commenter la réponse de blanchoc
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 3 oct. 2006 à 10:26
0
Utile
Alors avant même d'analyser ton code, commence par ceci

Dim selectCmd As String, fromCmd As String, whereCmd1 As String, whereCmd2 As String, joinCmd As String, orderbyCmd As String

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 3 oct. 2006 à 10:33
0
Utile
Même punition pour la décalration de la fonction :
Function creerChaineConnexion2(table1, colonnes1, table2, colonnes2, whereCol1, _
whereOp1, whereVal1, whereCol2, whereOp2, whereVal2, joinCol1, joinCol2, orderbyCol) As String

table1, colonnes1, ... sont de quels types ??? c'est pas préciser.

Il faut toujours typer ses avriables pour ne pas avoir de surprises par la suite.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention - 3 oct. 2006 à 10:35
0
Utile
je viens de tester, et pas de changement, ma chaine est toujours tronquee.
Commenter la réponse de blanchoc
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 3 oct. 2006 à 10:37
0
Utile
Re,
333139 casy a raison. Ensuite est ce que cette fonction est appelée par tes soins avec des valeurs en dur du style

creerChaineConnexion2("BDD_RegionOrganismes", "ENTETE_REGION_ORGANISMES, ENTETE_PAYS ", "BDD_PaysISO", "", "ENTETE_REGION_ORGANISMES", " =", "'AELE'", "ENTETE_PAYS", "=", "'CHE'", "ENTETE_PAYS", "ENTETE_PAYS", "")

Ou bien alors elle est appele a l'aide de valeur su style
Call creerChaineConnexion2(table1, colonnes1, table2, colonnes2, whereCol1, _
whereOp1, whereVal1, whereCol2, whereOp2, whereVal2, joinCol1, joinCol2, orderbyCol)

Car dans ce dernier cas, c'est peu etre les valeurs des variables qui ne sont pas bonnes.
@+,   Ju£i?n
Commenter la réponse de jrivet
blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention - 3 oct. 2006 à 10:42
0
Utile
table1, colonnes1, table2, colonnes2, whereCol1, _
whereOp1, whereVal1, whereCol2, whereOp2, whereVal2, joinCol1, joinCol2, orderbyCol

sont des variables globales string, j'ai verifié elles contiennent les bonnes valeurs lors de l'entree dans la fonction. j'ai essayé de mettre string partout pas de changement non plus.
Commenter la réponse de blanchoc
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 3 oct. 2006 à 10:46
0
Utile
Re,


Essaie de mettre




Function creerChaineConnexion2(table1, colonnes1, table2, colonnes2, whereCol1, _ 
whereOp1, whereVal1, whereCol2, whereOp2, whereVal2, joinCol1, joinCol2, orderbyCol) As String 
'[...]

    creerChaineConnexion2 = selectCmd & fromCmd & joinCmd & whereCmd1 & whereCmd2 & orderbyCmd 
      Msgbox creerChaineConnexion2 
End If 

End Function 


Comme ca on verra deja si avant de sortir de la fonction creerChaineConnexion2 contient bien ce que tu souhaites

@+,   Ju£i?n
Commenter la réponse de jrivet
blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention - 3 oct. 2006 à 10:50
0
Utile
lol  , je sais que je suis pas hyper douée mais quand meme!
Commenter la réponse de blanchoc
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 3 oct. 2006 à 10:51
0
Utile
NON table1, colonnes1, .... ne sont pas des variables globales dans cette procédure. Ce sont des variables locales (différentes des globales) qui sont déclarées comme paramètres de ta fonction.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
blanchoc 17 Messages postés mercredi 15 novembre 2000Date d'inscription 4 octobre 2006 Dernière intervention - 3 oct. 2006 à 10:56
0
Utile
pardon, je voulais dire:


j'appelle la fonction par


query = creerChaineConnexion2(table1:=feuilleDonnees1, colonnes1:=colonnes1, table2:=feuilleDonnees2, _
colonnes2:=colonnes2, whereCol1:=champWhere11, whereOp1:=operateurWhere11, whereVal1:=valeurWhere11, whereCol2:=champWhere21, whereOp2:=operateurWhere21, whereVal2:=valeurWhere21, joinCol1:=colJoin1, _
joinCol2:=colJoin2, orderbyCol:=colTri)


ou feuilleDonnees1, colonnes1, feuilleDonnees2...etc sont globales
Commenter la réponse de blanchoc
geobasic 69 Messages postés jeudi 6 novembre 2003Date d'inscription 3 octobre 2006 Dernière intervention - 3 oct. 2006 à 16:13
0
Utile
Ta chaîne n'est pas tronqué elle est tout à fait correcte. On voit bien quel se termine par une simple côte. A mon avis c'est le 2ème test qui ne fonctionne pas ce qui fait que whereCmd2 est à blanc. Je te conseille de faire un pas à pas pour vérifier si les 3 conditions du test sont bien réunies.
Commenter la réponse de geobasic

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.