Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1530 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU] Taille maximum String et requête

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Taille maximum String et requête

n°1447259
Alphajet
Faites le vous-même!
Posté le 25-09-2006 à 18:41:53  profilanswer
 

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.
mood
Publicité
Posté le 25-09-2006 à 18:41:53  profilanswer
 

n°1447293
MagicBuzz
Posté le 25-09-2006 à 19:53:43  profilanswer
 

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
n°1447409
Alphajet
Faites le vous-même!
Posté le 26-09-2006 à 09:34:06  profilanswer
 

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.
n°1447428
MagicBuzz
Posté le 26-09-2006 à 10:03:21  profilanswer
 

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
n°1447435
Alphajet
Faites le vous-même!
Posté le 26-09-2006 à 10:13:53  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU] Taille maximum String et requête

 

Sujets relatifs
[postgresql]requete nombre de colonnes[Resolu][C#NET] Mettre le focus sur un onglet (pour le faire afficher)
superiorité de string[Résolu] un tuto flash pour débuter ?
[Résolu] Dbgrid et Tpagecontrol Question bête[MYSQL] [RESOLU] avec UNION, comment "créer" un champs ?
mesurer la performance d'une requête, d'un indexMeme requete sur deux tables differentes
Problème avec requête sql et ordre d'affichage des champs [résolu] 
Plus de sujets relatifs à : [RESOLU] Taille maximum String et requête


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR