Longueur maximale string [Résolu]

Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Dernière intervention
4 octobre 2006
- 3 oct. 2006 à 09:54 - Dernière réponse :
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
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!
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Dernière intervention
4 octobre 2006
- 3 oct. 2006 à 16:18
1
Merci
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

Merci blanchoc 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de blanchoc
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- 3 oct. 2006 à 10:07
0
Merci
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
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 3 oct. 2006 à 10:17
0
Merci
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
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Dernière intervention
4 octobre 2006
- 3 oct. 2006 à 10:21
0
Merci
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
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 3 oct. 2006 à 10:26
0
Merci
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
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 3 oct. 2006 à 10:33
0
Merci
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
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Dernière intervention
4 octobre 2006
- 3 oct. 2006 à 10:35
0
Merci
je viens de tester, et pas de changement, ma chaine est toujours tronquee.
Commenter la réponse de blanchoc
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- 3 oct. 2006 à 10:37
0
Merci
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
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Dernière intervention
4 octobre 2006
- 3 oct. 2006 à 10:42
0
Merci
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
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- 3 oct. 2006 à 10:46
0
Merci
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
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Dernière intervention
4 octobre 2006
- 3 oct. 2006 à 10:50
0
Merci
lol  , je sais que je suis pas hyper douée mais quand meme!
Commenter la réponse de blanchoc
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 3 oct. 2006 à 10:51
0
Merci
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
Messages postés
17
Date d'inscription
mercredi 15 novembre 2000
Dernière intervention
4 octobre 2006
- 3 oct. 2006 à 10:56
0
Merci
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
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Dernière intervention
3 octobre 2006
- 3 oct. 2006 à 16:13
0
Merci
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.