ajout de champs dans une requête via un formulaire
13 réponses
chev92
Bonjour à tous,
Sur une table contenant les champs nommés A,B,C,D,E ,etc ... je voudrais
créer automatiquement une requête à partir de choix multiples faits dans un
formulaire avec des cases à cocher.
Par exemple : si je coche A,B et D dans le formulaire, la requête me
retourne les infos contenues dans les champs A,D et D de la table.
Ce sont donc les choix faits dans le formulaire qui vont définirles colonnes
des items de la requête.
Comment cela peut-il se construire ou se programmer ?
Merci d'avance de votre aide.
La sagesse m'a appris qu'il ne sert à rien de s'obstiner face aux gens qui ont toujours agressivement raison : J'ai donc remplacé les "[Formulaires!]" par tes Forms!, ... et cela ne fonctionne toujours pas; So what ?
"chev92" | Ce n'est donc pas cela qui est à l'origine des messages d'erreur observés | avec le CreateQueryDef ...
et moi je te répête que tu dois utiliser des expressions anglaises dans le VBA ;-)
La sagesse m'a appris qu'il ne sert à rien de s'obstiner face aux gens qui
ont toujours agressivement raison :
J'ai donc remplacé les "[Formulaires!]" par tes Forms!, ... et cela ne
fonctionne toujours pas;
So what ?
"chev92"
| Ce n'est donc pas cela qui est à l'origine des messages d'erreur observés
| avec le CreateQueryDef ...
et moi je te répête que tu dois utiliser des expressions anglaises dans le VBA ;-)
La sagesse m'a appris qu'il ne sert à rien de s'obstiner face aux gens qui ont toujours agressivement raison : J'ai donc remplacé les "[Formulaires!]" par tes Forms!, ... et cela ne fonctionne toujours pas; So what ?
"chev92" | Ce n'est donc pas cela qui est à l'origine des messages d'erreur observés | avec le CreateQueryDef ...
et moi je te répête que tu dois utiliser des expressions anglaises dans le VBA ;-)
Je n'ai pas lu toute la requête avec une attention soutenue mais :
Set sQDF = Me.CreateQuerydef("req Multichoix", sSQL) jamais vu. Je ferai : Dim QDF as DAO.QueryDef Set QDF= CurrentDb.CreateQuerydef(...) et à la fin de la procédure Set QDF = Nothing
En plus, j'ai l'impression qu'il y a des problèmes au niveau du sql. A vérifier. sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait," If Option_S = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![S])))," End If
devrait être: If Option_S = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl].[S])))" & " ± " & "CStr(Fix(StDev([AnMinEl].[S])))," End If Idem pour les autres If ... End If
PS: sans oublier la remarque de Pierre relative à la sortie de [Forms]![form Multichoix]![Choix Origine_Ethnique], et de l'autre, de la chaine.
Merci de ce complément d'information. Je me heurte maintenant à un problème de définition de cette fonction CerateQueryDef. C'est sûrement tout bête, mais je rame parce que je suis complètement néophyte dans en matière de programmation dans Access. Pour être plus efficace, voici le texte de la procédure événementielle de sortie de mon formulaire "form Multichoix" (par action sur un bouton "Éxécuter"), pour créer une requête qui devrait s'appeler "req Multichoix" [AnMInEl et Echant sont des tables de ma DB] : =============================== > Private Sub Exécuter_Click() On Error GoTo Err_Exécuter_Click
Dim sSQL As String sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait," If Option_S = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![S])))," End If If Option_Cu = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Cu]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![Cu])))," End If If Option_Fe = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Fe]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![Fe])))," End If sSQL = Left(sSQL, Len(sSQL) - 1) sSQL = sSQL & " FROM Échant INNER JOIN AnMinEl ON Échant.Échant_Numéro = AnMinEl.Échant_Numéro" & _ " GROUP BY Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait" & _ " HAVING (((Échant.Or_Ethnic)=[Formulaires]![form Multichoix]![Choix Origine_Ethnique]) AND" & _ " ((Échant.TypeCheveu)=[Formulaires]![form Multichoix]![Choix Type_Cheveux])" & _ " AND ((Échant.NbTrait)=0));" MsgBox (sSQL) Set sQDF = Me.CreateQueryDef("req Multichoix", sSQL) MsgBox ("REQ CREEE") DoCmd.OpenQuery ("req Multichoix")
End Sub =============================== > Je ne vois pas ce qui cloche, mais peut-être aurez-vous un regard plus expérimenté que le mien. Par avance, merci. Cordialement.
Salut,
"chev92" | Maintenant, l'étape suivante : | 1- puis-je sauvegarder cette chaîne SQL en tant que requête ?
évidement... regarde :
CreateQueryDef (NomDeLaRequete, strSQL)
| 2- comment puis programmer l'éxécution de cette chaîne pour extraire les | infos de ma table ?
-- A+ Eric http://users.skynet.be/mpfa/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour,
Je n'ai pas lu toute la requête avec une attention soutenue mais :
Set sQDF = Me.CreateQuerydef("req Multichoix", sSQL) jamais vu.
Je ferai :
Dim QDF as DAO.QueryDef
Set QDF= CurrentDb.CreateQuerydef(...)
et à la fin de la procédure
Set QDF = Nothing
En plus, j'ai l'impression qu'il y a des problèmes au niveau du sql. A
vérifier.
sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait,"
If Option_S = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" &
CStr(Fix(StDev([AnMinEl]![S]))),"
End If
devrait être:
If Option_S = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl].[S])))" & " ± " &
"CStr(Fix(StDev([AnMinEl].[S]))),"
End If
Idem pour les autres If ... End If
PS: sans oublier la remarque de Pierre relative à la sortie de
[Forms]![form Multichoix]![Choix Origine_Ethnique], et de l'autre, de la
chaine.
Merci de ce complément d'information.
Je me heurte maintenant à un problème de définition de cette fonction
CerateQueryDef. C'est sûrement tout bête, mais je rame parce que je suis
complètement néophyte dans en matière de programmation dans Access.
Pour être plus efficace, voici le texte de la procédure événementielle de
sortie de mon formulaire "form Multichoix" (par action sur un bouton
"Éxécuter"), pour créer une requête qui devrait s'appeler "req Multichoix"
[AnMInEl et Echant sont des tables de ma DB] :
=============================== > Private Sub Exécuter_Click()
On Error GoTo Err_Exécuter_Click
Dim sSQL As String
sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait,"
If Option_S = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" &
CStr(Fix(StDev([AnMinEl]![S]))),"
End If
If Option_Cu = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Cu]))) & "" ± "" &
CStr(Fix(StDev([AnMinEl]![Cu]))),"
End If
If Option_Fe = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Fe]))) & "" ± "" &
CStr(Fix(StDev([AnMinEl]![Fe]))),"
End If
sSQL = Left(sSQL, Len(sSQL) - 1)
sSQL = sSQL & " FROM Échant INNER JOIN AnMinEl ON Échant.Échant_Numéro =
AnMinEl.Échant_Numéro" & _
" GROUP BY Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait" & _
" HAVING (((Échant.Or_Ethnic)=[Formulaires]![form Multichoix]![Choix
Origine_Ethnique]) AND" & _
" ((Échant.TypeCheveu)=[Formulaires]![form Multichoix]![Choix
Type_Cheveux])" & _
" AND ((Échant.NbTrait)=0));"
MsgBox (sSQL)
Set sQDF = Me.CreateQueryDef("req Multichoix", sSQL)
MsgBox ("REQ CREEE")
DoCmd.OpenQuery ("req Multichoix")
End Sub
=============================== >
Je ne vois pas ce qui cloche, mais peut-être aurez-vous un regard plus
expérimenté que le mien.
Par avance, merci.
Cordialement.
Salut,
"chev92"
| Maintenant, l'étape suivante :
| 1- puis-je sauvegarder cette chaîne SQL en tant que requête ?
évidement... regarde :
CreateQueryDef (NomDeLaRequete, strSQL)
| 2- comment puis programmer l'éxécution de cette chaîne pour extraire les
| infos de ma table ?
Je n'ai pas lu toute la requête avec une attention soutenue mais :
Set sQDF = Me.CreateQuerydef("req Multichoix", sSQL) jamais vu. Je ferai : Dim QDF as DAO.QueryDef Set QDF= CurrentDb.CreateQuerydef(...) et à la fin de la procédure Set QDF = Nothing
En plus, j'ai l'impression qu'il y a des problèmes au niveau du sql. A vérifier. sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait," If Option_S = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![S])))," End If
devrait être: If Option_S = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl].[S])))" & " ± " & "CStr(Fix(StDev([AnMinEl].[S])))," End If Idem pour les autres If ... End If
PS: sans oublier la remarque de Pierre relative à la sortie de [Forms]![form Multichoix]![Choix Origine_Ethnique], et de l'autre, de la chaine.
Merci de ce complément d'information. Je me heurte maintenant à un problème de définition de cette fonction CerateQueryDef. C'est sûrement tout bête, mais je rame parce que je suis complètement néophyte dans en matière de programmation dans Access. Pour être plus efficace, voici le texte de la procédure événementielle de sortie de mon formulaire "form Multichoix" (par action sur un bouton "Éxécuter"), pour créer une requête qui devrait s'appeler "req Multichoix" [AnMInEl et Echant sont des tables de ma DB] : =============================== > Private Sub Exécuter_Click() On Error GoTo Err_Exécuter_Click
Dim sSQL As String sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait," If Option_S = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![S])))," End If If Option_Cu = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Cu]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![Cu])))," End If If Option_Fe = True Then sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Fe]))) & "" ± "" & CStr(Fix(StDev([AnMinEl]![Fe])))," End If sSQL = Left(sSQL, Len(sSQL) - 1) sSQL = sSQL & " FROM Échant INNER JOIN AnMinEl ON Échant.Échant_Numéro = AnMinEl.Échant_Numéro" & _ " GROUP BY Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait" & _ " HAVING (((Échant.Or_Ethnic)=[Formulaires]![form Multichoix]![Choix Origine_Ethnique]) AND" & _ " ((Échant.TypeCheveu)=[Formulaires]![form Multichoix]![Choix Type_Cheveux])" & _ " AND ((Échant.NbTrait)=0));" MsgBox (sSQL) Set sQDF = Me.CreateQueryDef("req Multichoix", sSQL) MsgBox ("REQ CREEE") DoCmd.OpenQuery ("req Multichoix")
End Sub =============================== > Je ne vois pas ce qui cloche, mais peut-être aurez-vous un regard plus expérimenté que le mien. Par avance, merci. Cordialement.
Salut,
"chev92" | Maintenant, l'étape suivante : | 1- puis-je sauvegarder cette chaîne SQL en tant que requête ?
évidement... regarde :
CreateQueryDef (NomDeLaRequete, strSQL)
| 2- comment puis programmer l'éxécution de cette chaîne pour extraire les | infos de ma table ?