Requête sql sous vba

Résolu/Fermé
basshero816 Messages postés 115 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 5 août 2010 - 4 août 2008 à 16:28
Yoskopolite Messages postés 83 Date d'inscription lundi 14 juillet 2008 Statut Membre Dernière intervention 9 novembre 2012 - 8 août 2008 à 17:03
Bonjour,

Je développe un utilitaire sous access, et j'ai besoin d'effectuer une requête sous vba.
Il s'agit d'un simple INSERT INTO basé sur les résultats d'une autre requête de sélection.



Voici le code :

sql1 = "SELECT DISTINCT Formation.CodeFormation FROM Formation WHERE Formation.LibelleFormation LIKE '" & Forms![Formation consigne]!LibelleFormation.Value & "';"
Set rs1 = CurrentDb.OpenRecordset(sql1)
tmp = rs1(0)

sql2 = "INSERT INTO MetierFormation(CodeFormation, Metier) VALUES (" & tmp & ", '" & Me.Metier2 & "');"
CurrentDb.Execute (sql2)

sql3 = "SELECT DISTINCT Employe.TypeContrat, Employe.Matricule, Employe.Nom, Employe.Prenom, Employe.Telephone, Employe.Service, Employe.DateDeb, Employe.DateFin, Employe.DatederniereVisite, Employe.DateProchaineVisite, Employe.Matricule1, Employe.Apte, Employe.ApteTele, Employe.ApteCabine, Employe.ApteCariste FROM Employe INNER JOIN EmployeMetier ON Employe.Matricule = EmployeMetier.Matricule WHERE EmployeMetier.Metier LIKE '" & Me.Metier2 & "';"
Set rs = CurrentDb.OpenRecordset(sql3)

While rs.EOF <> True
sql4 = "INSERT INTO EmployeFormation ( TypeContrat, CodeFormation, Matricule, Metier, Nom, Prenom, Telephone, Service, DateDeb, DateFin, DatederniereVisite, DateProchaineVisite, Matricule1, Apte, ApteTele, ApteCabine, ApteCariste, TypeFormation) VALUES ('" & rs(0) & "', " & tmp & ", " & rs(1) & ", '" & Me.Metier2 & "', '" & rs(2) & "', '" & rs(3) & "', '" & rs(4) & "', '" & rs(5) & "', '" & rs(6) & "', '" & rs(7) & "', '" & rs(8) & "', '" & rs(9) & "', " & rs(10) & ", " & rs(11) & ", " & rs(12) & ", " & rs(13) & ", " & rs(14) & ", 'Consigne de travail en sécurité');"
CurrentDb.Execute (sql4)
rs.MoveNext
Wend



Les trois premières requetes retournent bien les bonnes informations.
Mais la quatrième ne se fait pas, j'ai une erreur qui dit "Trop peu de paramètres. 1 attendu".
J'ai pourtant vérifié les types des champs, tout concorde, alors je ne vois pas la solution, même si je suis sûr qu'elle est basique...

Need help please!!!

4 réponses

Yoskopolite Messages postés 83 Date d'inscription lundi 14 juillet 2008 Statut Membre Dernière intervention 9 novembre 2012 8
4 août 2008 à 16:38
Bonjour,

Il est possible que l'un de tes 15 éléments à insérer ( rs(0) à rs(14) ) contienne un caractère qui pose problème, certainement une apostrophe ( ' ) ou un guillemet ( " ). Dans ce genre de cas, Access interprète ce caractère comme la fin de la requête et s'arrête là.
D'ailleurs, si un jour tu rencontre "trop PEU de paramètre", c'est aussi certainement dû à un des éléments qui contient un nombre à virgule...

Après, ce ne sont que des hypothèses. Je ne suis pas sûr que ça soit ça...
Le meilleure moyen de vérifier ça, c'est d'afficher la requête (avec un petit Call Msgbox(sql4) ou de l'exporter dans un ficher), afin de voir ce qu'elle contient vraiment...

Si tu ne trouve pas, affiche nous cette requête pour voir
-1
basshero816 Messages postés 115 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 5 août 2010 6
4 août 2008 à 16:53
TypeContrat Stage
Matricule 605
Nom NEW
Prenom New
Telephone 03 27 27 27 27
Service Fabrication Casing
DateDeb
DateFin
DatederniereVisite
DateProchaineVisite
Matricule1 605
Apte 0
ApteTele 0
ApteCabine 0
ApteCariste 0



Voici les données de la requete n°3. Les valeurs des dates sont à Null, c'est de là que vient l'erreur pour moi. Mais pourquoi me mettre qu'il attend UN paramètre, et non 4..?

Au niveau du téléphone, c'est un string, donc pas de soucis. Et les "apte" sont des booléens.
-1
Yoskopolite Messages postés 83 Date d'inscription lundi 14 juillet 2008 Statut Membre Dernière intervention 9 novembre 2012 8
4 août 2008 à 17:12
pourquoi il mettrait 1 au lieu de 4 ? je n'en ai aucune idée, mais il me le fait souvent à moi aussi... Peut-être que le message d'erreur est buggé (ça serait un comble)

Tu dis que ce sont les Null que tu essaye d'insérer dans des champs dates qui te font l'erreur ? Au pire essaye un cas où il y a effectivement des dates à insérer, et tu verras si ça marche.
-1
basshero816 Messages postés 115 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 5 août 2010 6
5 août 2008 à 08:51
Salut Yoskopolite!

Finalement, j'ai trouvé mon erreur.
Il suffisait de mettre les booléen "apte" entre ' " _ _ _ " ' et non entre simples guillemets.
Je pensais qu'ils avaient une valeur numérique, mais non.

Merci de ton aide.

A+
-1
Yoskopolite Messages postés 83 Date d'inscription lundi 14 juillet 2008 Statut Membre Dernière intervention 9 novembre 2012 8
8 août 2008 à 17:03
Euh... Je suis pas sûr de comprendre...
Tu pourrais nous fournir la partie du code une fois corrigé ? ça pourrait être utile ^^
-1