Pb de typage avec DataSet.insert()

louiso13 Messages postés 2 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 5 décembre 2006 - 30 nov. 2006 à 14:30
Bedoui19773 Messages postés 5 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 8 décembre 2006 - 8 déc. 2006 à 14:35
Bonjour à tous (C'est mon premier post ici),

Alors voilà, ca fait 2 jours que je bloque sur une bétise :

Je développe sous Visual Basic 2005 Express et Access 2002, une petite appli de gestion de stock toute bête. Je parviens à insérer des enregistrement dans ma table 'code' contenant la liste des différents code des produits que rencence mon application. Pour ca, j'ai fais un petit form dans lequel on saisi un code identifiant, une désignation et un prix. Tout se comporte très bien tant qu'on ne saisit pas de nombre avec une partie décimale dans la textbox 'prix'. Si on saisi un nombre qui n'est pas un entier j'obtient le message : "Type de données incompatible dans l'expression du critère".

Pourtant ce champ est bien déclaré en double côté access, j'ai même essayé tous les types numériques que propose Access, mais rien à faire, le moteur JET d'access lève toujour cette exception lorsque j'insère une valeur décimale.

Voici mon appel à la méthode insert() :

Try
            CodeTableAdapter.Insert( "D06" _
                                                    , tabCodetxtDescription.Text _
                                                    , CType(tabCodeTxtPrixEstime.Text, Double))
Catch ex As Exception
            MsgBox(ex.Message)
            Exit Sub
End Try

Notez bien que ca marche au poil quand 'tabCodeTxtPrixEstime' contient une valeur entière et même lorqu'elle contient une valeur du type: 12,00.
Y a-t-il un format spécial pour le passage d'argument de type double?
Je vous en supplie AIDEZ-MOI, je suis sur cette bêtise depuis 2 jours!!

Merci d'avance.

4 réponses

nbaduraux Messages postés 24 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 15 septembre 2017
1 déc. 2006 à 16:39
1. Assures toi du type de ta colonne dans Access :
    Type de données = numérique
    Taille du champs = Réel simple ou Réel double (et non entier ...)
    Ajoutes 2 ou 3 en nombre de décimales pour être sur.

2. Es-tu sur de la conversion de ta chaine tabCodeTxtPrixEstime.Text en double ?
    Si tu ne précises rien, le séparateur doit etre une virgule et non un point
    (le point génèrera une erreur.)
    Tu peux ajouter un Replace pour forcer la virgule :
     CType(tabCodeTxtPrixEstime.Text.Replace("."
,
",")
, Double)



3. Si ces points ne règlent rien : quel est l'objet CodeTableAdapter que tu utilises dans ton exemple et surtout la définition de ta méthode Insert ?
0
louiso13 Messages postés 2 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 5 décembre 2006
5 déc. 2006 à 17:33
Merci pour ta réponse [auteurdetail.aspx?ID=481020 ]nbaduraux,

j'ai déjà vérifié tout ce qui serait succeptible de lever une erreur avec ce message (genre type des colonnes, variables que je passe à insert() ) mais ca ne règle rien. La variable passée est bien un double, le séparateur qu'il soit point ou virgule n'y change rien.
J'ai bien re-testé, en particulier tes points 1 et 2 mais le problème persiste.

Mon CodeTableAdapter est un tableAdapter lié à mon BaseDataSet, qui me permet d'effectuer des actions de modifications ou de consultation sur ma table code. Comme je débute sur Visual Basic 2005, j'ai l'impression de dire un truc débile et évident mais cela répond-il a ta question?
En ce qui concerne la méthode insert(), elle a été auto-générée avec le tableAdapter et je ne sais pas comment voir/modifier sa définition.

Merci pour le temps que tu me consacre.
0
nbaduraux Messages postés 24 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 15 septembre 2017
5 déc. 2006 à 19:33
Le problème réside probablement dans cette fonction alors, mais là, je ne peux pas t'aider. Je n'utilises pas les assistants et autre dataset typés car je préfère maitriser les accès aux données. Désolée. 
0
Bedoui19773 Messages postés 5 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 8 décembre 2006
8 déc. 2006 à 14:35
Salut
J'ai un probleme (Erreur N°3201)
Dans le code suivant si vous pouvez m'aider merci

Private Sub Enregistrement_Click()
Dim bds As DAO.Database, rst As DAO.Recordset



Set bds = CurrentDb
Set rst = bds.OpenRecordset("T_MVT", DB_OPEN_TABLE)
With rst


.AddNew

![CodeMVT] = Me![Code MVT] ' Ajoute les données.
![Code32FC] = Me![Code32FC]
![CodeMois] = Me![CodeMois]
![CodeRegion] = Me![CodeRegion]
![MontantMois] = Me![Texte47]
![Rectifs] = Me![Texte45]



If MsgBox("Enregistrer ces modifications?", vbYesNo) = vbNo Then

rst.CancelUpdate
Else

rst.Update
End If
End With
bds.Close

Texte10.Value = ""
CodeCRA.Value = ""
Code32FC.Value = ""
CodeMois.Value = ""
CodeRegion.Value = ""
Texte29.Value = ""
Texte13.Value = ""
Texte15.Value = ""
Texte47.Value = ""
Texte45.Value = "0,000"

End Sub
0
Rejoignez-nous