VB - erreur de conversion de type [Résolu]

chamttt 16 Messages postés mardi 30 juin 2009Date d'inscription 28 décembre 2009 Dernière intervention - 16 nov. 2009 à 10:55 - Dernière réponse : chamttt 16 Messages postés mardi 30 juin 2009Date d'inscription 28 décembre 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 16 nov. 2009 à 12:07
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 16 nov. 2009 à 11:19
0
Merci
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
Commenter la réponse de Renfield
chamttt 16 Messages postés mardi 30 juin 2009Date d'inscription 28 décembre 2009 Dernière intervention - 16 nov. 2009 à 11:47
0
Merci
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
Commenter la réponse de chamttt
chamttt 16 Messages postés mardi 30 juin 2009Date d'inscription 28 décembre 2009 Dernière intervention - 16 nov. 2009 à 14:11
0
Merci
Merci Renfield,

En changeant le type cela fonctionne à merveille !

You're really an MVP visual basic ;)
Commenter la réponse de chamttt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.