Type incompatible quand insertion d'une variable dans base Access

Résolu
cecelecyborg Messages postés 16 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 2 octobre 2007 - 14 mars 2006 à 11:39
cecelecyborg Messages postés 16 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 2 octobre 2007 - 14 mars 2006 à 13:52
Bonjour à tous,

Je suis toujours avec mes problèmes de programmation en VB6...

Donc cette fois ci j'ai besoin d'aide pour l'insertion d'une variable numérique dans une table Access.
La table Access a été créée en ligne de code sql via du VB6, elle s'appelle Customer et contient 2 colonnes (Colonne et Colnum [Original non ?])
Petite précision, je suis en settings Américain (L'appli doit être utilisée aux US, donc les chiffres ont ce format 1,000.00)
Voilà le bout de code :

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
Dim oConnection
Dim oRecordset
Dim Titi As Currency

Set oConnection = CreateObject("ADODB.Connection")
Set oRecordset = CreateObject("ADODB.Recordset")

oConnection.Open "DSN=Quickbooks Data;"

oRecordset.CursorLocation = adUseClient
oRecordset.Open "SELECT TxnID, subtotal FROM Invoice ", oConnection, adOpenStatic, adLockOptimistic

Load_Access_Connection
While oRecordset.EOF() = False

Titi = oRecordset.Fields(1).Value

If IsNumeric(Titi) Then
MsgBox (Titi)
Else
MsgBox ("bof")
End If

Access_Connection.Execute ("Insert into Customer(colnum) values ('" + Titi + "')")
oRecordset.MoveNext
End If
Wend

Au début, le type de ma variable n'était pas assigné, donc j'ai testé tous les types, ça change rien.
Dans mon fichier Access, Colnum est bien en numérique.

Voici un bout de code qui marche lui :

Dim Toto
Load_Access_Connection
Toto = "32.3"
Access_Connection.Execute ("Insert into Customer(colnum) values ('" + Toto + "')")

Et je vois pas trop la différence avec mon bout de code... sauf le recordset, c'est vrai...

J'espère que vous pourrez m'aider et je vous en remercie par avance
ça fait 2 jours que je suis bloquée sur ça

Bonne journée,
Céline.

3 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 mars 2006 à 12:18
si toto est numérique, ne fais pas
Toto = "32.3"
mais
Toto = 32.3

d'autre part, on ne concatène JAMAIS en utilisant le symbole '+' mais bien en utilisant '&'

Renfield
Admin CodeS-SourceS - MVP Visual Basic
3
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
14 mars 2006 à 12:15
Salut :)

ton problème vient des apostrophes autour de ta valeur: ces dernières ne sont utilises que pour les valeurs de type texte ou date.
Dans ton cas tu dois mettre:
Access_Connection.Execute ("Insert into Customer(colnum) values (" + Toto + ")")

Voila :)

Rollerman
0
cecelecyborg Messages postés 16 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 2 octobre 2007
14 mars 2006 à 13:52
Bonjour,



J'avais déjà essayé sans les simple quote mais ça ne marchait pas

Pour la concaténation, je ne suis pas pro du tout en VB6, merci pour le tuyau



Enfin, j'ai réussi à trouver une solution à mon piti problème :
je rappelle mon souci : J'ai un champ Numérique dans une base Access que je veux renseigner. Je lui mets un chiffre via un recordset, marche pas même avec un CCur() sur la valeur...

Et bien, la solution, c'est justement faire l'inverse de ce que je veux obtenir... Voilà la ligne qui marche sans l'erreur Type Incompatible =>
Access_Connection.Execute ("Insert into Customer(colnum) values ('" & CStr(oRecordset.Fields(1).Value) & "')")

Oui, vous lisez bien, je passe ma variable en texte pour qu'elle soit en Numérique...
Donc plus de messages d'erreurs en faisant ça et surtout, dans ma table Access, les données sont bien enregistrées et sont en format Numérique...

Y'a de quoi perdre des neurones
Bonne journée,
Céline
0
Rejoignez-nous