Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 11h16   #1
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Par défaut Requête SQL, changer Critère(s) en VBA

Bonjour,

J'ai la requête suivante:
Code :
1
2
3
4
5
 
SELECT Format([tblProduction]![DateProduction],"yyyy/mm") AS M, tblFamilleProduction.FamilleProd, Sum(tblProductionQte.qté) AS Qté
FROM (tblFamilleProduction INNER JOIN tblProduit ON tblFamilleProduction.IdFamilleProd=tblProduit.idFamilleProd) INNER JOIN (tblProduction INNER JOIN tblProductionQte ON tblProduction.Idproduction=tblProductionQte.Idproduction) ON tblProduit.IdProduit=tblProductionQte.Idproduit
WHERE (((tblFamilleProduction.IdFamilleProd)=19 Or (tblFamilleProduction.IdFamilleProd)=20))
GROUP BY Format([tblProduction]![DateProduction],"yyyy/mm"), tblFamilleProduction.FamilleProd;
j'aimerai changer le champ IdFamilleProd selon les critères d'une liste déroulante en VBA.
J'ai essayé via un formulaire, et cela fonctionne pour un critère. Mais pour x valeurs (12 ou 13 ou 14) par exemple, la requête SQL ne me retourne rien.
Code :
1
2
 
WHERE (((tblFamilleProduction.IdFamilleProd)=[Formulaires]![frmStatsmoisFamille]![IdFamilleProd]))
J'ai cherché sur le FAqs, et je ne trouve pas comment changer le ou les critères dans une requêtes SQL.

Merci d'avance de votre aide

Cordialement
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 13h17   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Salut Christian,

Est-ce que tu utilises une liste à choix multiples dans laquelle tu sélectionnes plusieurs "IdFamilleProd" ?

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 13h39   #3
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour Denis,

Concernant ta question, non.
Ma zone liste est basé sur une table, et selon le choix j'aimerai modifier les critères du champ "IdFamilleProd" de la requête "rqyQtéProdMoisFamille" en VBA.
Voilà ce que j'ai aussi essayé de faire, trouvé sur le site:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
If Me.idCompteprod = 4 Then
    'référence à la requête
    Set qdf = CurrentDb.QueryDefs("rqyQtéProdMoisFamille")
    'code qui utilise qdf
    qdf.Parameters("IdFamilleProd") = 19 Or 20     '<== si requête paramétrée
    qdf.Execute                                 '<== si requête action
    'Set rcs = qdf.OpenRecordset                 '<== pour travailler sur les données
    'libération de la référence
    Set qdf = Nothing
    DoCmd.OpenForm "frmStatsmoisFamille", , , , , , CompteFamille
    DoCmd.Close acForm, Me.Name
    Exit Sub
End If
J'ai une erreur au niveau de "Parameters"

@+
Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 13h56   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Re,

Peux-tu joindre 1 exemple parce que là je t'avoue que j'ai du mal à comprendre

Je regarderai plus tard...
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h39   #5
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Re,

Ci-joint le fichier.
Tu ouvres le "frmStatsmois", puis sur le zone liste GRAPHIQUE tu clic sur Venus.
Et c'est ici que j'ai mon erreur.
J’espère que mon explication a été claire.
j'aimerai voir, si je peux améliorer l'application.

Autrement, j'ai pu effectuer tout les graphiques de cette application.
Ca n'a pas été évident, mais grace à tes explications j'y suis arrivé.
Bien entendu, celle-ci n'est pas terminé, car j'ai d'autre graph à effectuer (comparaison entre les heures non productive et la production, etc..) d'ou le test.

Merci d'avance.
@+
Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 16h23   #6
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Re,

Je viens d'essayer la solution suivante:
Code :
1
2
3
4
5
6
7
8
9
 
strsql = "  Format([tblProduction]![DateProduction],"yyyy/mm") AS M, tblFamilleProduction.FamilleProd, Sum(tblProductionQte.qté) AS Qté"
'strSQL = " SELECT tblProduction.DateProduction = #" & Format(Date, "yyyy/mm") & "# AS M, tblFamilleProduction.FamilleProd, Sum(tblProductionQte.qté) AS Qté"
strSQL = strSQL & " FROM (tblFamilleProduction INNER JOIN tblProduit ON tblFamilleProduction.IdFamilleProd = tblProduit.idFamilleProd)"
strSQL = strSQL & " INNER JOIN (tblProduction INNER JOIN tblProductionQte ON tblProduction.Idproduction = tblProductionQte.Idproduction) ON tblProduit.IdProduit = tblProductionQte.Idproduit"
strSQL = strSQL & " WHERE (((tblFamilleProduction.IdFamilleprod) = 19 Or (tblFamilleProduction.IdFamilleprod) = 20))"
strSQL = strSQL & " GROUP BY Format([tblProduction]![DateProduction],"yyyy/mm"), tblFamilleProduction.FamilleProd;"
'strSQL = strSQL & " GROUP BY tblProduction.DateProduction = #" & Format(Date, "yyyy/mm") & "#, tblFamilleProduction.FamilleProd;"
CurrentDb.QueryDefs("rqyQtéProdMoisFamille").sql = strSQL
Il me transforme bien le SQL de la requête, mais j'ai un souci au niveau de la date.

Je dois m'absenter.
Je regarde ça demmain matin

Bonne soirée, et merci de ton aide

Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 18h22   #7
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Salut,

Il faudrait faire apparaitre dans la requête "rqyQtéProdGraphMoisFamille", le champ "idFamilleProd".

Puis, mettre dans le code de la zone de liste "Graphique", pour Venus (idCompteProd=4)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
If Me.idCompteprod = 4 Then
 
    DoCmd.OpenForm "frmStatsmoisFamille"
 
    Forms!frmStatsmoisFamille!MoisD = Me!MoisD
    Forms!frmStatsmoisFamille!AnneeD = Me!AnneeD
 
    Forms!frmStatsmoisFamille!MoisF = Me!MoisF
    Forms!frmStatsmoisFamille!AnneeF = Me!AnneeF
 
    Forms!frmStatsmoisFamille!Graph.RowSource = "TRANSFORM Sum(rqyQtéProdGraphMoisFamille.Qté) AS SommeDeQté " & _
                                                "SELECT rqyQtéProdGraphMoisFamille.Mois, Sum(rqyQtéProdGraphMoisFamille.Qté) AS Total " & _
                                                "FROM rqyQtéProdGraphMoisFamille WHERE IsNull(IdFamilleProd) or (IdFamilleProd=19) or (IdFamilleProd=20) GROUP BY rqyQtéProdGraphMoisFamille.Mois PIVOT rqyQtéProdGraphMoisFamille.FamilleProd;"
    Forms!frmStatsmoisFamille!Graph.Requery
    DoCmd.Close acForm, Me.Name
    Exit Sub
End If
Sans conviction,

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/02/2011, 10h25   #8
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour Denis,

Ton code fonctionne bien (MERCI)

Alors, voilà comment j'ai fait.
1) J'ai modifé la requête "rqyQtéProdGraphMoisFamille", en ajoutant le champ "idFamilleProd"
2) J'ai modifié les paramètres dans la requête "rqyMoisFamille"
3) J'ai mis le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
If Me.idCompteprod = 4 Then
sql = "TRANSFORM Sum(rqyQtéProdGraphMoisFamille.Qté) AS SommeDeQté"
        sql = sql & " SELECT rqyQtéProdGraphMoisFamille.Mois, Sum(rqyQtéProdGraphMoisFamille.Qté) AS Total"
        sql = sql & " FROM rqyQtéProdGraphMoisFamille WHERE IsNull(IdFamilleProd) or (IdFamilleProd=19) or (IdFamilleProd=20)"
        sql = sql & " GROUP BY rqyQtéProdGraphMoisFamille.Mois PIVOT rqyQtéProdGraphMoisFamille.FamilleProd;"
        Me.Graph.RowSource = sql
        Forms!frmStatsmois!Graph.Requery
 
        Me.Form.Caption = "Statistiques Venus par mois"
        Me.Titre.Caption = "Statistiques Venus du mois de : " & PeriodeStats
Exit Sub
End If
dans le formulaire "frmStatsmois".
Et cela fonctionne très bien.

De cette façon je n'utilise qu'un seul formulaire, et deux types de requête (Graphique avec "IdCompteProd" et Graphique avec "IdFamilleProd") selon le choix de la zone liste.
Comme cela, l’application sera allégé (moins de requête et juste un formulaire)

Encore merci de ton aide.
Je me perfectionne de plus en plus avec tes précieux conseils, car j'ai une meilleure vision de ce que je fait

A bientôt et bonne journée.

Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h08.


 
 
 
 
Partenaires

Hébergement Web