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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Résolu] PB pour enregistrer des données dans la BSD ACCESS avec VBA

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] PB pour enregistrer des données dans la BSD ACCESS avec VBA

n°1671384
SkamakS
Posté le 15-01-2008 à 11:42:07  profilanswer
 

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 :
 
 

Code :
  1. For Each champ In req.Fields
  2.     If champ.Name <> "Code Article" And champ.Name <> "code ancien" And champ.Name <> "Désignation" And champ.Name <> "ancienne désignation" And champ.Name <> "n°Plan" And champ.Name <> "Img Plan" Then
  3.         i = i + 1
  4.         FlexInfo.Rows = i + 1
  5.         FlexInfo.TextMatrix(i, 0) = champ.Name
  6.     End If
  7. Next


 
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 :
 

Code :
  1. pieces.Open "pieces", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  2. pieces.AddNew
  3. pieces![Code Article] = [txtCodeArt]
  4. pieces![code ancien] = [txtOldArt]
  5. pieces![Désignation] = [txtDesign]
  6. pieces![ancienne désignation] = [txtOldDesign]
  7. pieces![n°Plan] = [txtNumPlan]
  8. pieces![Img Plan] = [txtImgPlan]
  9. For i = 0 To FlexInfo.Rows - 1
  10.     texte = FlexInfo.TextMatrix(i, 0)
  11.     pieces![texte] = FlexInfo.TextMatrix(i, 1)
  12. Next i
  13. pieces.Update
  14. pieces.Close


 
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 :D
 
Merci d'avance de votre aide précieuse.


Message édité par SkamakS le 17-01-2008 à 15:55:17
mood
Publicité
Posté le 15-01-2008 à 11:42:07  profilanswer
 

n°1671412
olivthill
Posté le 15-01-2008 à 12:42:06  profilanswer
 

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().

n°1672085
SkamakS
Posté le 16-01-2008 à 12:22:41  profilanswer
 

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.

n°1672773
SkamakS
Posté le 17-01-2008 à 14:49:48  profilanswer
 

Personne n'a une idée ? :/

n°1672777
MagicBuzz
Posté le 17-01-2008 à 14:55:37  profilanswer
 

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...

n°1672815
SkamakS
Posté le 17-01-2008 à 15:50:34  profilanswer
 

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" :/

n°1672817
MagicBuzz
Posté le 17-01-2008 à 15:51:45  profilanswer
 

ben alors utilise la vraie syntaxe :
 
pieces("texte" )

n°1672818
SkamakS
Posté le 17-01-2008 à 15:54:44  profilanswer
 

Yeah je connaissais pas cette syntaxe !
 
Ca marche en mettant pieces(texte)
 
Merci bcp :D

n°1672820
MagicBuzz
Posté le 17-01-2008 à 15:56:31  profilanswer
 

(ok, tu voulais l'inverse de ce que j'avais compris :D m'enfin bon, oui effectivement, avec cette syntaxe ça débloque la situation :D)
 
PS : j'ai jamais pigé d'où venait l'ignominie "pieces![champ]". pour moi, c'est à bannir absolument de tout code en tout cas.

n°1672822
MagicBuzz
Posté le 17-01-2008 à 15:58:22  profilanswer
 

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.


Message édité par MagicBuzz le 17-01-2008 à 15:58:35
mood
Publicité
Posté le 17-01-2008 à 15:58:22  profilanswer
 

n°1672909
tegu
Posté le 17-01-2008 à 17:26:14  profilanswer
 

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...).


Message édité par tegu le 17-01-2008 à 17:26:48
n°1672914
MagicBuzz
Posté le 17-01-2008 à 17:40:28  profilanswer
 

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é :o

n°1673271
SkamakS
Posté le 18-01-2008 à 12:29:25  profilanswer
 

MagicBuzz > oui sympas ça de pouvoir récupérer uniquement la valeur du champ texte...
 
Enfin merci en tout cas :p Là j'ai fini le formulaire, marche bien niquel :D


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

  [Résolu] PB pour enregistrer des données dans la BSD ACCESS avec VBA

 

Sujets relatifs
[résolu] Erreur pour validation W3C à cause d'URLs avec paramètresLire et écrire dans une base de données SQL via Excel
[Résolu] Includes ne fonctionnent plus depuis session[Résolu]Rétrécir une image
Probleme sur theme Php [résolu][Résolu] problème strstr() et son 3e paramètre
[Access - SQL] Count sur plusieurs tables[Access] Modification d'une base de données
Choix de base de données pour structurer du contenu 
Plus de sujets relatifs à : [Résolu] PB pour enregistrer des données dans la BSD ACCESS avec VBA


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