Soucis de génération dynamique de requêtes parametrables

Résolu
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 - 6 févr. 2009 à 15:00
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 - 9 févr. 2009 à 10:07
Bonjour à tous,

  Et voilà 4 ans que je n'avais pas mis les mains dans VBA et me voici surement avec une erreur de débutant ... du moins je l'espère.

Voici mon soucis, je suis en train de faire la mise en place d'un automate Excel permettant à partir d'un fichier txt de rentrer ces donnés dans une base Access. Jusqu'ici rien de bien compliqué. Le soucis va se trouver dans la construction des query pour faire l'insertion et l'update de donnée.

Je suis donc passé par des requetes parametrables saisie dans les objets QueryDef.

La grande blague c'est que lors de ma construction de ces requetes un premier contrôle est fait par l'objet pour eviter que des paramètres possèdent certains caracteres  =>   "()/$%?&@!-=+ç^[];:,.`{}<>*\#|±¢£¤¬¦²³¼½¾~´ "
Donc pour résoudre ceci une petit replace et on en parle plus dans les parametres et je me retrouve avec ce type de requete :

PARAMETERS PM_New_Part_Number Text, PM_Description__ Text, PM_ROHS Text, PM_Value Text, PM_PCB_Footprint Text, PM_Schematic_Part Text, PM_Dimension_Lxlxh__mm_ Text, PM_Temperature_range Text, PM_AEC_Q Text, PM_Farnell Text, PM_Statut_Composants Text, PM_Type Text, PM_Voltage Text, PM_Tolerance Text;
UPDATE Capacitors SET  [Description()] = PM_Description__, [ROHS] = PM_ROHS, [Value] = PM_Value, [PCB_Footprint] = PM_PCB_Footprint, [Schematic_Part] = PM_Schematic_Part, [Dimension_Lxlxh_(mm)] = PM_Dimension_Lxlxh__mm_, [Temperature_range] = PM_Temperature_range, [AEC_Q] = PM_AEC_Q, [Farnell] = PM_Farnell, [Statut_Composants] = PM_Statut_Composants, [Type] = PM_Type, [Voltage] = PM_Voltage, [Tolerance] = PM_Tolerance WHERE  [New_Part_Number] = PM_New_Part_Number;

et là la reponse à l'execution est un simple message d'erreur :
Erreur d'execution 3061 : Trop peu de paramètres. 16 attendu

Je me suis un peu enervé et vient de trouver quels sont les 2 parametres manquant et là surprise l'objet QueryDefs possédent dans sa liste de parametres :
 - les 14 parametres créés par la requete
 - un parametre  Description()
 - un parametre  Dimension_Lxlxh_(mm)

L'analyse est simple il trouve des caracteres interdits et me créé ces 2 parametres (qui ne respecte pas bien sur ces propres controles )

Est ce que quelqu'un q deja eu ce soucis et si oui comment l'a t'il contourné ? Il va de soit que je ne peux pas changer la structure de la bd

En vous remerciant pour le coup de main 

2 réponses

zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 1
6 févr. 2009 à 21:00
oui, j'ai déjà eu ton soucis.

j'ai commencé par passer une requete demandant 1 paramètre, puis deux, puis trois.

tu n'arriveras jamais à débugger ton code si tu commence avec les 14 paramètres, c'est trop. Fait gaffe aussi aux retours chariot



--------------------------------------------------
Toujours + de VB et d'API => APi @ le Loupe
http://apialaloupe.free.fr
3
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
9 févr. 2009 à 10:07
J'ai effectivement dû faire les tests paramètres par paramètres et changer la façon de faire mon Update ( au lieu d'exécuter une seule et unique requête je l'ai fait passer par un update champ à champ dans une boucle)

Mais au final j'ai réussi à trouver la faille. Elle ne venait pas du code mais de la base de donnée. Lors de la création de l'exécution du QueryDefs celui doit faire un test sur l'existence des champs indiqué dans la requête.

Résultat pour mon soucis, la base de donnée avait non pas les champs Description()
et  Dimension_Lxlxh_(mm) mais les champs ... défaut de conception de la base. Je soupçonne la fonction de créer à la volée des paramètres si les champs n'existent pas.

Donc pour ma part la solution à ce problème se trouve là :
  - Vérifier que certains caractères ne soit pas présent dans le nom des champs et des paramètres

  - surtout s'assurer que les champs de la requête correspondent bien à ceux de la base de donnée
0
Rejoignez-nous