PB pour enregistrer des données dans la BSD ACCESS avec VBA [Résolu] - VB/VBA/VBS - Programmation
Marsh Posté le 15-01-2008 à 12:42:06
pieces![texte] = FlexInfo.TextMatrix(i, 1)
1. S'assurer que le problème vient bien de cette ligne en essayant une compilation sans cette ligne ou avec cette ligne mise en commentaire.
2. Voir ce que rapporte FlexInfo.TextMatrix(i, 1), par exemple avec MsgBox(FlexInfo.TextMatrix(i, 1))
sans s'occuper de pieces![texte] pour voir si le problème vient de la partie droite ou de la partie gauche du signe égal.
3. S'assurer que le champ "texte" existe bien et avec exactement cette orthographe (pas "text" ou "Texte" ).
4. S'assurer que les types de données sont compatibles, qu'il ne manquerait pas une converstion à faire par exemple par un CStr().
Marsh Posté le 16-01-2008 à 12:22:41
Merci de ta réponse,
A moi de répondre
1. le problème vien bien de cette ligne, le débogueur s'arrête sur cette ligne.
2. FlexInfo.TextMatrix(i,1) apporte bien la valeur voulu.
3. texte est une variable de type STRING alimenté à chaque bouclage par un des champs de la table. Si tu regardes bien le code, tu comprendras pourquoi j'ai fait ça. Je pense que le soucis vien de là.
En fait il ne prend pas la valeur de la variable "texte" comme nom de champ, mais il prend "texte" comme champ, qui effectivement n'existe pas dans la table. Alors comment faire pour que je puisse utiliser la valeur de texte ?
4. Aucun soucis à ce niveau là non plus à se faire.
Marsh Posté le 17-01-2008 à 14:55:37
pieces!["texte"] non ?
et pourquoi y'a aucun "" dans tout ton code ? je comprends même pas pourquoi ça t'explose pas à la gueule dès la première ligne...
Marsh Posté le 17-01-2008 à 15:50:34
Ca ne marche pas en mettant "pieces!["texte"].
Ben y'a pas besoin de ""... Justement si je mets pieces!["Code Article"] à la place de pieces![Code Article] ça ne marche pas... Car il recherche dans la table le champ avec les ""... en fait le délimiteur ce sont les [] à la place des ""
Enfin bref, je sais pas comment je pourrais me débrouiller pour qu'il prenne en compte la valeur de la variable "texte"
Marsh Posté le 17-01-2008 à 15:54:44
Yeah je connaissais pas cette syntaxe !
Ca marche en mettant pieces(texte)
Merci bcp
Marsh Posté le 17-01-2008 à 15:56:31
(ok, tu voulais l'inverse de ce que j'avais compris m'enfin bon, oui effectivement, avec cette syntaxe ça débloque la situation )
PS : j'ai jamais pigé d'où venait l'ignominie "pieces![champ]". pour moi, c'est à bannir absolument de tout code en tout cas.
Marsh Posté le 17-01-2008 à 15:58:22
ps : pieces() prend en paramètre soit le nom du champ, soit le numéro de la colonne.
et plus marrant :
dim field
set field = pieces("texte" )
do while not pieces.eof
msgbox(field)
pieces.movenext
loop
=> Tu récupère ligne par ligne la valeur du champ "texte". ce qui est bien pratique dans certains cas, ça évite de surcharger le code pour rien.
Marsh Posté le 17-01-2008 à 17:26:14
La syntaxe « pieces![champ] » est la syntaxe historique héritée d'Access (v1), inspirée d'Excel, pour accéder aux champs d'une table, d'une requête, d'un formulaire (compatibilité ascendante, tout ça...).
Marsh Posté le 17-01-2008 à 17:40:28
ouais ben le gars qui a décidé d'intégrer cette syntaxe dans VBA, il aurait du mourrir le jour où il est né
Marsh Posté le 18-01-2008 à 12:29:25
MagicBuzz > oui sympas ça de pouvoir récupérer uniquement la valeur du champ texte...
Enfin merci en tout cas Là j'ai fini le formulaire, marche bien niquel
Marsh Posté le 15-01-2008 à 11:42:07
Bonjour,
Alors voilà, je vous explique mon problème.
En fait les données que je veux enregistrer sont stocké dans une FlexGrid.
Chaque ligne de la FlexGrid correspond à un champ de la table.
La 1ère colonne c'est le nom du champ, la 2nd est la valeur de celui-ci.
Voici comment est initialisé la FlexGrid à l'ouverture du formulaire :
Bon, pour ça, y'a aucun soucis ça marche !
Ensuite, une fois que j'ai renseigné les valeurs que je veux, ça bloque à l'enregistrement.
Voici mon code :
Ca bloque sur le "pieces![texte]" ligne 11...
J'ai le droit au message : "Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé... Et je ne vois pas trop comment résoudre le problème...
Donc si il y en a un qui est voit mieux que moi, qu'il n'hésite pas à se faire remarquer
Merci d'avance de votre aide précieuse.
Message édité par SkamakS le 17-01-2008 à 15:55:17