[VBA] pb avec INSERT INTO

Fermé
fredo91170 Messages postés 7 Date d'inscription vendredi 6 octobre 2006 Statut Membre Dernière intervention 31 juillet 2007 - 11 oct. 2006 à 15:53
 biskott - 22 févr. 2008 à 20:27
Bonjour,

Voilà comme vous pourrez le constater j'ai un petit pb pour envoyer mes données de mon Recordset dans une table "FINAL" dont les champs sont déja créer mais ne portent pas les mêmes noms que ma table d'où proviennent mes données.
Mon soucis se pose au niveau de la syntaxe INSERT INTO je crois bien.
Si une âme charitable pourrais faire quelque chose !!

MERCI

Option Compare Database
'Public SQL As String
'Public dB As Database
'Public Rs As Recordset
Sub copy()
Dim System As String

Set dB = CurrentDb
Set Rs = Nothing

SQL = "SELECT [Opé],[Date opé],Lp,Titre,Raison,Qte,Mt,Prime,Plan FROM [Sales Orders It Macro]"
Set Rs = dB.OpenRecordset(SQL)

If Rs.RecordCount > 0 Then

Rs.MoveFirst

Do Until Rs.EOF

System = Rs!LP & "." & Left(Rs!Titre, 4) & "." & Right(Rs!Titre, 3)

Rs.MoveNext

dB.Execute "INSERT INTO FINAL (OPE,[DATE OPE],LP,[CODE PRODUIT],RAISON,[QTY ORDERED],[UNIT PRICE TTC],PRIME,PLAN) values"

Loop
End If


End Sub

4 réponses

monSQL = "Insert Into T_maTable(MonChamp1, monChamp2) Values ('Valeur1',Valeur2')"

Il faut que tu aies le même nombre de valeur que de champ. Comme tu le vois, tes champs sont délimité par un quote et une virgule : il faut donc que tes valeurs ne contiennent pas de quote (') - on y remédie en doublant le quote pour que l'instruction SQL ne l'interprete pas comme un quote de fin de champ.

Dans ton cas, il y a surement une erreur soit dans l'écriture (9 champs alors qu'il n'y en a que 8) soit dans les données (il y a un null et tu n'as pas mis de quote).
1
Peut-êtreUneRéponse Messages postés 47 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 5 décembre 2006 11
11 oct. 2006 à 15:59
Rajoute le nom des champs d'où proviennent tes données après le terme values:

dB.Execute "INSERT INTO FINAL (OPE,[DATE OPE],LP,[CODE PRODUIT],RAISON,[QTY ORDERED],[UNIT PRICE TTC],PRIME,PLAN) values <ici>"

Dans le même ordre que les champs de la table FINAL énumérés après le INSERT TO FINAL.
0
fredo91170 Messages postés 7 Date d'inscription vendredi 6 octobre 2006 Statut Membre Dernière intervention 31 juillet 2007
11 oct. 2006 à 16:12
Desole mais je viens de faire ce que tu ma dis:

dB.Execute "INSERT INTO FINAL (OPE,[DATE OPE],LP,[CODE PRODUIT],RAISON,[QTY ORDERED],[UNIT PRICE TTC],PRIME,PLAN) values ([Opé],[Date opé],Lp,Titre,Raison,Qte,Mt,Prime,Plan)"

mais il bug toujours en me disant:
"too few parameters. Expected 9"

tu sais pourquoi?
0
Peut-êtreUneRéponse Messages postés 47 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 5 décembre 2006 11
11 oct. 2006 à 16:23
Ta table FINAL contient-elle d'autres colonnes que celles que tu alimentes?

Si oui tu dois aussi les renseigner... avec des valeurs par défaut par exemple.
0
fredo91170 Messages postés 7 Date d'inscription vendredi 6 octobre 2006 Statut Membre Dernière intervention 31 juillet 2007
11 oct. 2006 à 16:55
c'est le cas mais dans ma table d'origine j'ai 13 champs et dans celle de destination j'en ai 35
Alors comment le gerer
0
Peut-êtreUneRéponse Messages postés 47 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 5 décembre 2006 11
11 oct. 2006 à 17:03
Il faut que tu renseignes une valeur par défaut pour les colonnes supplémentaires de la table FINAL (35 - 9 = 26 valeurs par défaut)

Ou alors tu modifies le DDL de ta table et tu fais en sorte que les colonnes soit NULL WITH DEFAULT
0