[RESOLU] Taille maximum String et requête

Taille maximum String et requête [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 25-09-2006 à 18:41:53    

Bonjour,
 
Avant tout, j'ai utilisé la fonction recherche, mais elle me renvoyait des résultats dans toutes les catégories, et pas seulement VB/VBA/VBS...
 
J'ai une portion de code qui crée des requêtes INSERT INTO et les exécute à la suite. La requête est créée dans une String. Mon problème est que la fin de cette requête est tronquée, d'où l'impossibilité d'insertion dans la base.
Je ne comprends pas, elle a l'air d'être tronquée a quelques centaines de caractères (+ de 500) lorsque je fais afficher ma requête.
 
Quelle est la taille maximale d'une String? Et d'une requête dans Access ? J'ai lu que c'était beaucoup plus que 255 caractères, donc j'imagine que je problème doit venir d'ailleurs!
 

Code :
  1. 'Insertion des données dans la table Country
  2. ImportLoop
  3. MsgBox ("test:" & TabCountry(0, 23))
  4. For i = 0 To 240
  5.     sql2 = "INSERT INTO tbl_Country (Id_Country, Name_Country, ISOCode_Country, Population_Country, GDP_Country, GDPHab_Country, GDPGrowth_Country, Inflation_Country, Capital_Country, Map_Country, Flag_Country, Area_Country, NameRegion_Country, NameContinent_Country, CoastLine_Country, Language_Country, Time_Country, Religion_Country, Density_Country, Government_Country, GovernmentType_Country, NaturalRessources_Country, Importation_Country, Exportation_Country, Ports_Country, File_Country) "
  6.     sql2 = sql2 & "VALUES ('" & TabCountry(i, 0) & "', '" & TabCountry(i, 1) & "', '" & TabCountry(i, 2) & "', " & OrNull(TabCountry(i, 3)) & ", " & OrNull(TabCountry(i, 4)) & ", " & OrNull(TabCountry(i, 5)) & ", " & OrNull(TabCountry(i, 6)) & ", " & OrNull(TabCountry(i, 7)) & ", '" & TabCountry(i, 8) & "', '" & TabCountry(i, 9) & "', '" & TabCountry(i, 10) & "', " & OrNull(TabCountry(i, 11)) & ", '" & TabCountry(i, 12) & "', '" & TabCountry(i, 13) & "', " & OrNull(TabCountry(i, 14)) & ", '" & TabCountry(i, 15) & "', '" & TabCountry(i, 16) & "', '" & TabCountry(i, 17) & "', " & OrNull(TabCountry(i, 18)) & ", '" & TabCountry(i, 19) & "', '" & TabCountry(i, 20) & "', '" & TabCountry(i, 21) & "', '" & TabCountry(i, 22) & "', '" & TabCountry(i, 23) & "', '" & TabCountry(i, 24) & "', '" & TabCountry(i, 25) & "');"
  7.     MsgBox ("Req : " & sql2)
  8.     dbs.Execute sql2
  9. Next i
  10. MsgBox ("Req : " & sql2)
  11. MsgBox ("Country table updated" )


 
Notes :  

  • La fonction OrNull remplace un champ vide par Null dans les champs qui sont des entiers dans la base
  • La fonction ImportLoop remplit le tableau avec des valeurs récupérées dans un fichier Excel. J'ai vérifié, ces valeurs sont correctement entrées dans le tableau.


Message édité par Alphajet le 26-09-2006 à 10:14:17

---------------
Bien joué! Mais une brique ne rend jamais les coups.
Reply

Marsh Posté le 25-09-2006 à 18:41:53   

Reply

Marsh Posté le 25-09-2006 à 19:53:43    

tu vois comment qu'elle est tronquée ?
Car le MsgBox, ça ne m'étonnerait pas qu'il soit limité en taille par contre...
 
sinon, essaie d'utiliser les objets COMMAND et PARAMETER afin d'avoir un truc plus propre

Message cité 1 fois
Message édité par MagicBuzz le 25-09-2006 à 19:54:10
Reply

Marsh Posté le 26-09-2006 à 09:34:06    

MagicBuzz a écrit :

tu vois comment qu'elle est tronquée ?
Car le MsgBox, ça ne m'étonnerait pas qu'il soit limité en taille par contre...
 
sinon, essaie d'utiliser les objets COMMAND et PARAMETER afin d'avoir un truc plus propre


 
Oui j'ai pensé que le msgbox était tronqué, mais quand la requête passe, ça me dit qu'il faut que j'ai le même nombre d'attribut dans les VALUES que dans la liste des colonnes, ce qui me fait penser qu'effectivement ça coupe quelque part...
 
Je vais regarder comment on utilise command et parameter, merci


---------------
Bien joué! Mais une brique ne rend jamais les coups.
Reply

Marsh Posté le 26-09-2006 à 10:03:21    

Hmmm.
 
Je sais.
 
Enfin, je pense.
 
Je parie que t'as des nombres à virgule dans ta requête non ? Genre la densité, l'inflation, etc.
 
Si c'est le ça, "deux virgule sept" ça fait ça : " 2,7 "
 
Du coup dans la requête, ça fait deux valeurs distinctes, puisque le séparateur de valeurs c'est la virgule !
 
Tu dois remplacer la "," par un "." ou mettre le truc entre quotes.
 
D'où ma suggestion d'utiliser correctement les objets ADODB plutôt que de générer une chaîne buggée comme un goret.
 
Pour info, ton truc c'est un exemple classique de "sql injection", la plus grosse faille de sécurité d'un nombre impressionnant de sites. Utiliser correctement les objets COMMAND et PARAMETER évite ça.
 
Ca doit faire la 22000° fois en un an que je le dis, mais force est de constater que tout le monde préfère utiliser des techniques de merde qui plantent et qui continuent à donner une mauvaise réputation aux produits Microsoft...


Message édité par MagicBuzz le 26-09-2006 à 10:03:37
Reply

Marsh Posté le 26-09-2006 à 10:13:53    

Je crois que tu as tout à fait raison, et je fais mon mea culpa  :whistle:  
 
Non sérieusement, j'ai des nombres à virgule et ça fait forcément planter le nombre de champs qui ne coincide plus.
Je vais donc voir plus attentivement comment marchent les techniques que tu me suggères, même si j'ai du faire ça un peu en urgence donc je me suis débrouillé comme j'ai pu.
 
Merci en tout cas


---------------
Bien joué! Mais une brique ne rend jamais les coups.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed