VB - erreur de conversion de type

Résolu
chamttt Messages postés 16 Date d'inscription mardi 30 juin 2009 Statut Membre Dernière intervention 28 décembre 2009 - 16 nov. 2009 à 10:55
chamttt Messages postés 16 Date d'inscription mardi 30 juin 2009 Statut Membre Dernière intervention 28 décembre 2009 - 16 nov. 2009 à 14:11
Bonjour à tous,

J'ai un soucis avec une requete ajout dans ma BDD,

J'ai créé un formulaire duquel je récupère les données de différentes listes déroulantes que je place ensuite dans des variables avant de les envoyer vers ma bdd via un insert.
Je test avec des msgbox le remplissage de mes variables avant la requete, et tout est ok !
mais au moment du message de confirmation d'ajout de ligne, après avoir validé par oui, il me met un autre message : "access a attribué la valeur null à 1 champ à la suite d'une erreur de conversion de type, 0 enregistrements ajoutés suite à violation de clé, 0 suite à violation de verrou, 0 suite à violation des règles de validation." (en résumé)

J'ai deux types de données : des entiers long et des monétaires, les deux types sont déclarés correctement dans mon code dont voici l'extrait :

Private Sub bouton_ok_ajout_Click()
Dim v_goods, v_origin, v_pol, v_agent, v_type_article, v_company, v_season As Long
Dim v_coeff_tpt, v_coeff_dd, v_coeff_agent, v_coeff_total As Currency

v_company = Form_Ajouter_calcul!list_company_ajout.Column(1)
v_goods = Form_Ajouter_calcul!list_goods_ajout.Column(1)
v_origin = Form_Ajouter_calcul!list_origin_ajout.Column(1)
v_pol = Form_Ajouter_calcul!list_pol_ajout.Column(1)
v_agent = Form_Ajouter_calcul!list_agent_ajout.Column(1)
v_type_article = Form_Ajouter_calcul!list_type_article_ajout.Column(1)
v_season = Form_Ajouter_calcul!List_season_ajout.Column(1)

v_coeff_tpt = Form_Ajouter_calcul!zone_ajout_coeff_tpt.Value
v_coeff_dd = Form_Ajouter_calcul!zone_ajout_coeff_DD.Value
v_coeff_agent = Form_Ajouter_calcul!zone_ajout_coeff_agent.Value
v_coeff_total = Form_Ajouter_calcul!zone_ajout_coeff_global.Value

Call MsgBox(v_company, vbOKOnly)
Call MsgBox(v_goods, vbOKOnly)
Call MsgBox(v_origin, vbOKOnly)
Call MsgBox(v_pol, vbOKOnly)
Call MsgBox(v_agent, vbOKOnly)
Call MsgBox(v_type_article, vbOKOnly)
Call MsgBox(v_season, vbOKOnly)
Call MsgBox(v_coeff_tpt, vbOKOnly)
Call MsgBox(v_coeff_dd, vbOKOnly)

Call MsgBox(v_coeff_agent, vbOKOnly)
Call MsgBox(v_coeff_total, vbOKOnly)

DoCmd.RunSQL "insert into calcul([ID_Goods],[id_Origin],[id_POL],[id_Agent],[id_Type_article],[id_Season],[id_Company],[coeff_transport],[coeff_DD],[coeff_agent],[coeff_total]) VALUES ('v_goods','v_origin', 'v_pol', 'v_agent', 'v_type_article', 'v_season', 'v_company', 'v_coeff_tpt', 'v_coeff_dd', 'v_coeff_agent', 'v_coeff_total');"

End Sub


Merci d'avance pour votre aide et vos pistes !!
Mathieu

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 nov. 2009 à 12:07
oui, le type ne porte que sur la dernière.

concernant le nombre de values, a voir la chaine que tu transmets...
par exemple, si tes champs Currency fournissent une virgule ...

4,55 par exemple.

utilises la fonction Str$() pour passer le tout en format international et ne plus avoir ce souci


Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 nov. 2009 à 11:19
Dim v_goods, v_origin, v_pol, v_agent, v_type_article, v_company, v_season As Long

v_goods, v_origin, v_pol, v_agent, v_type_article, v_company seront des variables non typées, des variant, donc.

v_season est bien un Long



Call MsgBox(v_coeff_total, vbOKOnly)
vbOKOnly vaut 0, c'est la valeur par défaut...
MsgBox v_coeff_total
suffit donc largement


enfin, et dernière erreur, tu dois transmettre la valeur de tes variables et non leur non a ta requete...


"insert into calcul([ID_Goods],[id_Origin],[id_POL],[id_Agent],[id_Type_article],[id_Season],[id_Company],[coeff_transport],[coeff_DD],[coeff_agent],[coeff_total]) VALUES (" & v_goods & "," & v_origin & ", ...);"



Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
chamttt Messages postés 16 Date d'inscription mardi 30 juin 2009 Statut Membre Dernière intervention 28 décembre 2009
16 nov. 2009 à 11:47
Merci Renfield pour ta réponse,

tu veux dire que mes déclarations de variables ne prennent en considération que la derniere soit v_season en tant que long et que les autres ignorées ? je dois donc tout déclarer comme long ?

J'ai modifié ma requete et maintenant il me dit que le nombre de valeurs doit coincider avec le nombre de champs de destination !!!

DoCmd.RunSQL "insert into calcul([ID_Goods],[id_Origin],[id_POL],[id_Agent],[id_Type_article],[id_Season],[id_Company],[coeff_transport],[coeff_DD],[coeff_agent],[coeff_total]) VALUES (" & v_goods & "," & v_origin & "," & v_pol & "," & v_agent & "," & v_type_article & "," & v_season & "," & v_company & "," & v_coeff_tpt & "," & v_coeff_dd & "," & v_coeff_agent & "," & v_coeff_total & ");"

c'est pas bon ca ?

merci bcp
0
chamttt Messages postés 16 Date d'inscription mardi 30 juin 2009 Statut Membre Dernière intervention 28 décembre 2009
16 nov. 2009 à 14:11
Merci Renfield,

En changeant le type cela fonctionne à merveille !

You're really an MVP visual basic ;)
0
Rejoignez-nous