Pb d'incompatibilité de type données dans rqt INSERT INTO

Le
The Marmotte
Bonjour à tous,

Voilà, j'exécute une requête SQL Ajout via VBA, pour laquelle les données à
insérer ont été stockées dans des variables de ma procédure. Or, une de ces
données est de type Double (puisqu'elle va être insérée dans un champ Double
de ma table), mais dans ma requête SQL, la virgule de décimale de ma donnée
est considérée comme un séparateur, et l'exécution de ma requête VBA produit
l'erreur : "le nombre de données insérées doit être égale au nombre de
champs de destination"

J'ai essayé plein de trucs, du genre transformer ma variable en
Replace(Str(MaVariable), ",", ".") ou Replace(MaVariable, ",", ".") pour
remplacer la virgule par un point, mais rien n'y fait (avec cette fonction,
ma variable se retrouve entre guillemets, comme c'est devenu une chaîne, et
du coup je suppose que la valeur renvoyée dans ma requête est, par exemple,
"150.25" au lieu de 150.25. Du coup j'essaie de stocker un String dans un
champ Double !), et j'obtiens une autre erreur d'exécution de requête :
"Incompatibilité de type".
Voici donc mon bout de code, merci pour votre aide, ça fait des heures que
je fais du surplace, j'en ai marre !!!

Dim NoLoc as Integer, DateLoc as Date, MontantLoc as Double, strSQL as
String

NoLoc = Me.IdLoc
DateLoc = NoJour & "/" & NoMois & "/" & NoAnnee
MontantLoc = Me.Montant * Me.Duree / Me.DureeTotale

strSQL = "INSERT INTO TblRecapLoc ( Loc, DateDeLoc, MontantNet ) "
strSQL = strSQL & "SELECT " & CInt(NoLoc) & " AS F1, " & CDate(DateLoc) & "
AS F2, "
strSQL = strSQL & Replace(Str(MontantLoc), ",", ".") & " AS F3;"
DoCmd.RunSQL strSQL
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
msnews.microsoft.com
Le #4836531
Tu dois remplacer la vigule par un point

@+

LJ
"The Marmotte" 4046ebdf$0$29933$
Bonjour à tous,

Voilà, j'exécute une requête SQL Ajout via VBA, pour laquelle les données
à

insérer ont été stockées dans des variables de ma procédure. Or, une de
ces

données est de type Double (puisqu'elle va être insérée dans un champ
Double

de ma table), mais dans ma requête SQL, la virgule de décimale de ma
donnée

est considérée comme un séparateur, et l'exécution de ma requête VBA
produit

l'erreur : "le nombre de données insérées doit être égale au nombre de
champs de destination"

J'ai essayé plein de trucs, du genre transformer ma variable en
Replace(Str(MaVariable), ",", ".") ou Replace(MaVariable, ",", ".") pour
remplacer la virgule par un point, mais rien n'y fait (avec cette
fonction,

ma variable se retrouve entre guillemets, comme c'est devenu une chaîne,
et

du coup je suppose que la valeur renvoyée dans ma requête est, par
exemple,

"150.25" au lieu de 150.25. Du coup j'essaie de stocker un String dans un
champ Double !), et j'obtiens une autre erreur d'exécution de requête :
"Incompatibilité de type".
Voici donc mon bout de code, merci pour votre aide, ça fait des heures que
je fais du surplace, j'en ai marre !!!

Dim NoLoc as Integer, DateLoc as Date, MontantLoc as Double, strSQL as
String

NoLoc = Me.IdLoc
DateLoc = NoJour & "/" & NoMois & "/" & NoAnnee
MontantLoc = Me.Montant * Me.Duree / Me.DureeTotale

strSQL = "INSERT INTO TblRecapLoc ( Loc, DateDeLoc, MontantNet ) "
strSQL = strSQL & "SELECT " & CInt(NoLoc) & " AS F1, " & CDate(DateLoc) &
"

AS F2, "
strSQL = strSQL & Replace(Str(MontantLoc), ",", ".") & " AS F3;"
DoCmd.RunSQL strSQL




Buddy
Le #4836501
Salut essaie ca

strSQL = "INSERT INTO TblRecapLoc (Loc, DateDeLoc, MontantNet) VALUES (" & NoLoc & ", #" & DateLo &
"#, " & MontantLoc & ")"

Penses à mettre ta date au format US (mm/jj/aaaa)

Ouala
Bye
Buddy

"The Marmotte" news:4046ebdf$0$29933$
Bonjour à tous,

Voilà, j'exécute une requête SQL Ajout via VBA, pour laquelle les données à
insérer ont été stockées dans des variables de ma procédure. Or, une de ces
données est de type Double (puisqu'elle va être insérée dans un champ Double
de ma table), mais dans ma requête SQL, la virgule de décimale de ma donnée
est considérée comme un séparateur, et l'exécution de ma requête VBA produit
l'erreur : "le nombre de données insérées doit être égale au nombre de
champs de destination"

J'ai essayé plein de trucs, du genre transformer ma variable en
Replace(Str(MaVariable), ",", ".") ou Replace(MaVariable, ",", ".") pour
remplacer la virgule par un point, mais rien n'y fait (avec cette fonction,
ma variable se retrouve entre guillemets, comme c'est devenu une chaîne, et
du coup je suppose que la valeur renvoyée dans ma requête est, par exemple,
"150.25" au lieu de 150.25. Du coup j'essaie de stocker un String dans un
champ Double !), et j'obtiens une autre erreur d'exécution de requête :
"Incompatibilité de type".
Voici donc mon bout de code, merci pour votre aide, ça fait des heures que
je fais du surplace, j'en ai marre !!!

Dim NoLoc as Integer, DateLoc as Date, MontantLoc as Double, strSQL as
String

NoLoc = Me.IdLoc
DateLoc = NoJour & "/" & NoMois & "/" & NoAnnee
MontantLoc = Me.Montant * Me.Duree / Me.DureeTotale

strSQL = "INSERT INTO TblRecapLoc ( Loc, DateDeLoc, MontantNet ) "
strSQL = strSQL & "SELECT " & CInt(NoLoc) & " AS F1, " & CDate(DateLoc) & "
AS F2, "
strSQL = strSQL & Replace(Str(MontantLoc), ",", ".") & " AS F3;"
DoCmd.RunSQL strSQL




The Marmotte
Le #4836441
"msnews.microsoft.com"

Tu dois remplacer la vigule par un point



Oui ... ça je sais ... d'ailleurs, si tu as lu mon post initial, mon but est
de trouver comment faire ce remplacement de virgule par un point. Car j'ai
beau essayer avec Replace(), ça ne marche pas (Erreur d'exécution :
"incompatibilité de type", parce que, puisque j'ai transformé ma valeur
Double en valeur String avec Replace(), je ne peux pas insérer une valeur
String dans mon champ de table de type Double)

Si tou ou les autres avez d'autres pistes ... merci bcp !

The Marmotte
Le #4836431
"Buddy"
Salut essaie ca

strSQL = "INSERT INTO TblRecapLoc (Loc, DateDeLoc, MontantNet) VALUES (" &
NoLoc & ", #" & DateLo &

"#, " & MontantLoc & ")"


Merci mais le pb ne vient pas de là : j'en connais la source, c'est cette
fichue virgule décimale de ma valeur Double (MontantLoc) qui est en cause,
et je n'arrive pas à la remplacer par un point .. enfin oui, j'y arrive avec
Replace(Str(MontantLoc), ",", ".") mais du coup ma variable (Double) se
transforme en String et je ne peux pas l'insérer dans mon champ de table de
destination qui, lui, est de type Double.

Gaël Schmitt [MS]
Le #4836411
Bonjour,

As tu essayé de modifier tes paramètres régionaux ?

Gael
"The Marmotte" news:4046fb5d$0$29945$
"msnews.microsoft.com"

Tu dois remplacer la vigule par un point



Oui ... ça je sais ... d'ailleurs, si tu as lu mon post initial, mon but
est

de trouver comment faire ce remplacement de virgule par un point. Car j'ai
beau essayer avec Replace(), ça ne marche pas (Erreur d'exécution :
"incompatibilité de type", parce que, puisque j'ai transformé ma valeur
Double en valeur String avec Replace(), je ne peux pas insérer une valeur
String dans mon champ de table de type Double)

Si tou ou les autres avez d'autres pistes ... merci bcp !





The Marmotte
Le #4836371
"Gaël Schmitt [MS]" news:
Bonjour,

As tu essayé de modifier tes paramètres régionaux ?



Mes paramètres régionaux sont corrects (décimale = virgule, séparateur de
liste = point-virgule) et n'ont pas besoin d'être modifiés.
Le problème vient de l'écriture d'une requête SQL : c'est le point qui
sépare les décimales dans ce type de phrase SQL. Or ma variable calculée
comporte une virgule comme séparateur de décimale. Mon objectif est donc de
remplacer la virgule en point, mais comme je l'ai dit j'ai essayé Replace()
et ça me donne une erreur d'incompatibilité de type entre ma donnée variable
(devenue String à cause de la fonction Replace) et mon champ de destination
qui est de type Double.

Jessy Sempere [MVP]
Le #4836361
Bonjour

Effectivement c'est con cette histoire de séparateur décimal qui est
considéré comme un séparateur de champ en SQL...

Honnêtement en SQL je ne vois pas trop la solution par contre
il te suffit d'utiliser un recordset plutôt qu'un SQL et là tu n'auras
plus de problème...

Exemple :
******************************************************
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("TblRecapLoc", dbOpenDynaset)
With rst
.AddNew
.Fields("Loc") = CInt(Me.IdLoc)
.Fields("DateDeLoc") = CDate(NoJour & "/" & NoMois & "/" & NoAnnee)
.Fields("MontantNet") = Me.Montant * Me.Duree / Me.DureeTotale
.Update
End With
rst.Close: Set rst = Nothing
******************************************************
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"The Marmotte" 4046ebdf$0$29933$
Bonjour à tous,

Voilà, j'exécute une requête SQL Ajout via VBA, pour laquelle les données
à

insérer ont été stockées dans des variables de ma procédure. Or, une de
ces

données est de type Double (puisqu'elle va être insérée dans un champ
Double

de ma table), mais dans ma requête SQL, la virgule de décimale de ma
donnée

est considérée comme un séparateur, et l'exécution de ma requête VBA
produit

l'erreur : "le nombre de données insérées doit être égale au nombre de
champs de destination"

J'ai essayé plein de trucs, du genre transformer ma variable en
Replace(Str(MaVariable), ",", ".") ou Replace(MaVariable, ",", ".") pour
remplacer la virgule par un point, mais rien n'y fait (avec cette
fonction,

ma variable se retrouve entre guillemets, comme c'est devenu une chaîne,
et

du coup je suppose que la valeur renvoyée dans ma requête est, par
exemple,

"150.25" au lieu de 150.25. Du coup j'essaie de stocker un String dans un
champ Double !), et j'obtiens une autre erreur d'exécution de requête :
"Incompatibilité de type".
Voici donc mon bout de code, merci pour votre aide, ça fait des heures que
je fais du surplace, j'en ai marre !!!

Dim NoLoc as Integer, DateLoc as Date, MontantLoc as Double, strSQL as
String

NoLoc = Me.IdLoc
DateLoc = NoJour & "/" & NoMois & "/" & NoAnnee
MontantLoc = Me.Montant * Me.Duree / Me.DureeTotale

strSQL = "INSERT INTO TblRecapLoc ( Loc, DateDeLoc, MontantNet ) "
strSQL = strSQL & "SELECT " & CInt(NoLoc) & " AS F1, " & CDate(DateLoc) &
"

AS F2, "
strSQL = strSQL & Replace(Str(MontantLoc), ",", ".") & " AS F3;"
DoCmd.RunSQL strSQL




Gaël Schmitt [MS]
Le #4836331
Pour test mets le point comme séparateur décimal.

Gael.
"The Marmotte" news:4046ff01$0$29925$
"Gaël Schmitt [MS]" news:
Bonjour,

As tu essayé de modifier tes paramètres régionaux ?



Mes paramètres régionaux sont corrects (décimale = virgule, séparateur de
liste = point-virgule) et n'ont pas besoin d'être modifiés.
Le problème vient de l'écriture d'une requête SQL : c'est le point qui
sépare les décimales dans ce type de phrase SQL. Or ma variable calculée
comporte une virgule comme séparateur de décimale. Mon objectif est donc
de

remplacer la virgule en point, mais comme je l'ai dit j'ai essayé
Replace()

et ça me donne une erreur d'incompatibilité de type entre ma donnée
variable

(devenue String à cause de la fonction Replace) et mon champ de
destination

qui est de type Double.





Jessy Sempere [MVP]
Le #4836311
Re,

J'ai réussi en SQL chez moi, ça donne :

strSQL = "INSERT INTO TblRecapLoc ( Loc, DateDeLoc, MontantNet ) " _
& "VALUES (" & CInt(NoLoc) & ", " & CDate(DateLoc) & ", " _
& Replace(MontantLoc, ",", ".") & ");"
DoCmd.RunSQL strSQL

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jessy Sempere [MVP]" news: c26vlb$ji4$
Bonjour

Effectivement c'est con cette histoire de séparateur décimal qui est
considéré comme un séparateur de champ en SQL...

Honnêtement en SQL je ne vois pas trop la solution par contre
il te suffit d'utiliser un recordset plutôt qu'un SQL et là tu n'auras
plus de problème...

Exemple :
******************************************************
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("TblRecapLoc", dbOpenDynaset)
With rst
.AddNew
.Fields("Loc") = CInt(Me.IdLoc)
.Fields("DateDeLoc") = CDate(NoJour & "/" & NoMois & "/" &
NoAnnee)

.Fields("MontantNet") = Me.Montant * Me.Duree / Me.DureeTotale
.Update
End With
rst.Close: Set rst = Nothing
******************************************************
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------


Jessy Sempere [MVP]
Le #4836301
Salut Pierre

J'ai essayé aussi mais access transcrit le montant calculé dans le SQL
donc le montant avec les décimales...

Tu peux tester si tu veux, tu verras... ;-))

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Pierre CFI [mvp]" #EZm#
bonjour
on peut multiplier la variable, puis la diviser dans la chaine sql
Montant = Montant * 100

insert ...... & (Montant /100 ) & ...

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Jessy Sempere [MVP]" de news: c26vlb$ji4$

Bonjour

Effectivement c'est con cette histoire de séparateur décimal qui est
considéré comme un séparateur de champ en SQL...

Honnêtement en SQL je ne vois pas trop la solution par contre
il te suffit d'utiliser un recordset plutôt qu'un SQL et là tu n'auras
plus de problème...

Exemple :
******************************************************
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("TblRecapLoc", dbOpenDynaset)
With rst
.AddNew
.Fields("Loc") = CInt(Me.IdLoc)
.Fields("DateDeLoc") = CDate(NoJour & "/" & NoMois & "/" &
NoAnnee)


.Fields("MontantNet") = Me.Montant * Me.Duree / Me.DureeTotale
.Update
End With
rst.Close: Set rst = Nothing
******************************************************
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"The Marmotte" 4046ebdf$0$29933$
Bonjour à tous,

Voilà, j'exécute une requête SQL Ajout via VBA, pour laquelle les
données



à
insérer ont été stockées dans des variables de ma procédure. Or, une
de



ces
données est de type Double (puisqu'elle va être insérée dans un champ
Double

de ma table), mais dans ma requête SQL, la virgule de décimale de ma
donnée

est considérée comme un séparateur, et l'exécution de ma requête VBA
produit

l'erreur : "le nombre de données insérées doit être égale au nombre de
champs de destination"

J'ai essayé plein de trucs, du genre transformer ma variable en
Replace(Str(MaVariable), ",", ".") ou Replace(MaVariable, ",", ".")
pour



remplacer la virgule par un point, mais rien n'y fait (avec cette
fonction,

ma variable se retrouve entre guillemets, comme c'est devenu une
chaîne,



et
du coup je suppose que la valeur renvoyée dans ma requête est, par
exemple,

"150.25" au lieu de 150.25. Du coup j'essaie de stocker un String dans
un



champ Double !), et j'obtiens une autre erreur d'exécution de requête
:



"Incompatibilité de type".
Voici donc mon bout de code, merci pour votre aide, ça fait des heures
que



je fais du surplace, j'en ai marre !!!

Dim NoLoc as Integer, DateLoc as Date, MontantLoc as Double, strSQL as
String

NoLoc = Me.IdLoc
DateLoc = NoJour & "/" & NoMois & "/" & NoAnnee
MontantLoc = Me.Montant * Me.Duree / Me.DureeTotale

strSQL = "INSERT INTO TblRecapLoc ( Loc, DateDeLoc, MontantNet ) "
strSQL = strSQL & "SELECT " & CInt(NoLoc) & " AS F1, " &
CDate(DateLoc) &



"
AS F2, "
strSQL = strSQL & Replace(Str(MontantLoc), ",", ".") & " AS F3;"
DoCmd.RunSQL strSQL












Publicité
Poster une réponse
Anonyme