Requête sql sous vba
Résolu
basshero816
Messages postés
115
Date d'inscription
Statut
Membre
Dernière intervention
-
Yoskopolite Messages postés 83 Date d'inscription Statut Membre Dernière intervention -
Yoskopolite Messages postés 83 Date d'inscription Statut Membre Dernière intervention -
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!!!
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!!!
A voir également:
- Requête sql sous vba
- Logiciel sql - Télécharger - Bases de données
- Excel compter cellule couleur sans vba - Guide
- Sql (+) - Forum Programmation
- Find vba - Astuces et Solutions
- Incompatibilité de type vba ✓ - Forum VB / VBA
4 réponses
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
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
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.
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.
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.
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.