Longueur maximale string

Résolu
blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 - 3 oct. 2006 à 09:54
blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 - 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!
A voir également:

14 réponses

blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 1
3 oct. 2006 à 16:18
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
1
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 oct. 2006 à 10:07
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 oct. 2006 à 10:17
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 #
0
blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 1
3 oct. 2006 à 10:21
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
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 oct. 2006 à 10:26
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 #
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 oct. 2006 à 10:33
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 #
0
blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 1
3 oct. 2006 à 10:35
je viens de tester, et pas de changement, ma chaine est toujours tronquee.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 oct. 2006 à 10:37
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
0
blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 1
3 oct. 2006 à 10:42
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.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 oct. 2006 à 10:46
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
0
blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 1
3 oct. 2006 à 10:50
lol  , je sais que je suis pas hyper douée mais quand meme!
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 oct. 2006 à 10:51
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 #
0
blanchoc Messages postés 17 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 4 octobre 2006 1
3 oct. 2006 à 10:56
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
0
geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006
3 oct. 2006 à 16:13
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.
0
Rejoignez-nous