Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

14 réponses
Avatar
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

10 réponses

1 2
Avatar
msnews.microsoft.com
Tu dois remplacer la vigule par un point

@+

LJ
"The Marmotte" <F... The Spammers> a écrit dans le message de 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




Avatar
Buddy
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" <F... The Spammers> a écrit dans le message de
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




Avatar
The Marmotte
"msnews.microsoft.com" a écrit dans le message news:


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 !

Avatar
The Marmotte
"Buddy" a écrit dans le message news:

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.

Avatar
Gaël Schmitt [MS]
Bonjour,

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

Gael
"The Marmotte" <F... The Spammers> a écrit dans le message de
news:4046fb5d$0$29945$
"msnews.microsoft.com" a écrit dans le message news:


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 !





Avatar
The Marmotte
"Gaël Schmitt [MS]" a écrit dans le message
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.

Avatar
Jessy Sempere [MVP]
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" <F... The Spammers> a écrit dans le message 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




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

Gael.
"The Marmotte" <F... The Spammers> a écrit dans le message de
news:4046ff01$0$29925$
"Gaël Schmitt [MS]" a écrit dans le message
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.





Avatar
Jessy Sempere [MVP]
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]" a écrit dans le message
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/
------------------------------------


Avatar
Jessy Sempere [MVP]
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]" a écrit dans le message news:
#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]" a écrit dans le message
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" <F... The Spammers> a écrit dans le message 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












1 2