Longueur maximale string [Résolu]

Signaler
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
-
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
-
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!

14 réponses

Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
1
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
1
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
1
je viens de tester, et pas de changement, ma chaine est toujours tronquee.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
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
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
1
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.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
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
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
1
lol  , je sais que je suis pas hyper douée mais quand meme!
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2006
1
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
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

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.