IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Utiliser le résultat de SELECT Sum dans If


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut Utiliser le résultat de SELECT Sum dans If
    Slt,
    J'ai deux requetes:
    Une qui recherche des valeurs selon une date selectionnée dans le formulaire et la date()
    et l'autre qui somme c'est valeur !

    Ma question est comment je peux utiliser le résultat de la deuxième pour l'imbriquer dans la fonction IF??
    J'ai essayé ça mais c'est pas au point
    Ici je reproduis la deuxième requete qui utilise la première pour faire la somme et tenter d'utiliser le résultat sur le IF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub DateRdv_AfterUpdate()
    Dim CalculEtat As String
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    Set CalculEtat = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly)
    If (CalculEtat <= 4) Then
    Me.EtatRdv = "Veille"
    Else
    Me.EtatRdv = "Brut"
    End If
    End Sub
    A l'execution j'ai :
    Objet requis sur
    Set CalculEtat
    J'ai essayé de m'aider de ça http://access.developpez.com/faq/?page=SQL#Recordset mais ..... ??
    Quelqu'un a une idée de ce qui cloche?
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    CalculEtat est une recordest, il faut donc que tu lui dise ce qu'il doit y'avoir dedans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If (CalculEtat("SommeDeValeurPourCalculBrutVeille") <= 4) Then
    Essaye d'abord ceci

    Starec

  3. #3
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    Slt,
    Merci de ton aide Starec..
    J'ai rectifié comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub DateRdv_AfterUpdate()
    Dim CalculEtat As String
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    Set CalculEtat = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly)
    If (CalculEtat("SommeDeValeurPourCalculBrutVeille") <= 4) Then
    Me.EtatRdv = "Veille"
    Else
    Me.EtatRdv = "Brut"
    End If
    End Sub
    Mais j'ai toujours le :
    Objet requis
    sur :
    Set CalculEtat = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly)
    :
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    As-tu déclarer ton recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim CalculEtat as DAO.Recordset
    et ta connection db est-elle crée ?

    Starec

  5. #5
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    Harggg...
    ç'a y est c'est la panique...
    tu peux préciser car la ????
    et ta connection db est-elle crée ?
    ???
    je ne te suis plus là...
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pour utiliser la DAO, il faut faire d'abord ta connection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public db as DAO.database
    à mettre sous l'option explicite de ton module

    puis

    à mettre après ton "Private Sub DateRdv_AfterUpdate()"


    Starec

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    Je viens de relire ton code

    1 - Remplace
    par
    et à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim CalculEtat as DAO.Recordset
    met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim rst as DAO.recordset
    à mettre avant le set rst
    Starec

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Revoi les Tutos sur DAO, ils sont rès bien faits, c'est comme ceci que j'ai acquis les bases

    Starec

  9. #9
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    Houlaaaa !
    Tu va plus vite que moi ...
    Je n'ai pas créer de module...
    Il faut que j'en crée un d'après ce que tu m'a dis???
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    J'ai deux requetes:
    Une qui recherche des valeurs selon une date selectionnée dans le formulaire et la date()
    et l'autre qui somme c'est valeur !
    Je comprends pas ce que tu veux faire...
    Tu parles de deux requetes, et dans ton code il n'y en a que une .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    R_RegroupeValeurEntreDate : c'est une table ? (ca doit pas etre facile de travailler avec des noms aussi longs)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re

    Ton code est donc sous un formulaire, met en haut de ton code sous Option Explicit

    Starec

  12. #12
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    Citation Envoyé par Celia1303
    J'ai deux requetes:
    Une qui recherche des valeurs selon une date selectionnée dans le formulaire et la date()
    et l'autre qui somme c'est valeur !
    Je comprends pas ce que tu veux faire...
    Tu parles de deux requetes, et dans ton code il n'y en a que une .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    R_RegroupeValeurEntreDate : c'est une table ? (ca doit pas etre facile de travailler avec des noms aussi longs)
    R_RegroupeValeurEntreDate est la première requete !
    j'essai simplement de sommer les Valeurs avec
    "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    d'utiliser le résultat le temps du IF !

    j'ai donc repris et déclaré en haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Compare Database
    Private rst As DAO.Recordset
    puis dans mon afterUpdate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub DateRdv_AfterUpdate()
    Dim rst As DAO.Recordset
    rst = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    Set rst = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly)
    If (rst("SommeDeValeurPourCalculBrutVeille") <= 4) Then
    Me.EtatRdv = "Veille"
    Else
    Me.EtatRdv = "Brut"
    End If
    End Sub
    et j'ai
    Utilisation incorecte de la propriété
    sur
    rst = "SELECT Sum...
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  13. #13
    Invité
    Invité(e)
    Par défaut
    Re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub DateRdv_AfterUpdate() 
    Dim rst As DAO.Recordset 
    dim CalculEtat as string
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;" 
    Set rst = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly) 
    If (rst("SommeDeValeurPourCalculBrutVeille") <= 4) Then 
    Me.EtatRdv = "Veille" 
    Else 
    Me.EtatRdv = "Brut" 
    End If 
    End Sub
    Petit mélange, cela devrait aller mieux

    Starec

  14. #14
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    hargg.......
    De nouveau Objet requis sur la ligne :
    Set rst = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly)
    Ps : quand je met le curseur de la sourie sur
    dbOpenForwardOnly
    j'ai (= 8 )
    et sur
    dbReadOnly
    j'ai (=4) c'est quoi?
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  15. #15
    Invité
    Invité(e)
    Par défaut
    Re

    Le 8 et le 4 sont les valeurs qui peuvent remplacer dbOpenForwardOnly et dbReadOnly.

    Enlève les pour voir.

    De plus as-tu bien mis en haut de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public db as DAO.database
    et met sous le afeter update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set db = currentDB
    Starec

  16. #16
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    R_RegroupeValeurEntreDate est la première requete !
    Je ne savais pas qu'il était possible de mettre directement le nom d'une requete dans une autre requete...

    J'ai du mal à y croire...
    Je vais faire des recherches la dessus pour vérifier.

    Sinon c'est quoi ta première requete, tu as le code stp?

  17. #17
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    [quote="Celia1303"]

    Sinon c'est quoi ta première requete, tu as le code stp?
    [/quote="Celia1303"]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_JourOuvréValeur.Date, T_JourOuvréValeur.Ouvré, T_JourOuvréValeur.ValeurPourCalculBrutVeille
    FROM T_JourOuvréValeur
    GROUP BY T_JourOuvréValeur.Date, T_JourOuvréValeur.Ouvré, T_JourOuvréValeur.ValeurPourCalculBrutVeille
    HAVING (((T_JourOuvréValeur.Date) Between Date() And [Formulaires]![F_SuiteArguSolution]![F_RdvRépartition].[Form]![SF_RendezVous].[Form]![DateRdv]) AND ((T_JourOuvréValeur.Ouvré)=Yes));
    de cette requete je regroupe donc les enregistrements concernés entre les dates qui m'interesse.
    Je reprends juste le champ [ValeurPourCalculBrutVeille] que je somme avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    Selon le résultat je "change" le champ EtatRdv en "Veille" ou "Brut" avec la fonction If
    Ces deux requetes faites avec l'interface Accèss me donne le bon résultat, le souci c'est que ne n'arrive pas à utiliser correctement le résultat dans la fonction IF...
    Ps: Pour Starec
    J'ai mis en haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim db As DAO.Recordset
    Et sous afterUpdate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub DateRdv_AfterUpdate()
    Set db = CurrentDb
    Dim rst As DAO.Recordset
    Dim CalculEtat As String
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
    Set rst = db.OpenRecordset(CalculEtat)
    If (rst("SommeDeValeurPourCalculBrutVeille") <= 4) Then
    Me.EtatRdv = "Veille"
    Else
    Me.EtatRdv = "Brut"
    End If
    End Sub
    et j'ai
    Trop de paramettre. 1 attendu
    sur la ligne
    Set rst = db.OpenRecordset(CalculEtat)
    Ps: j'ai enlevé
    Le 8 et le 4 sont les valeurs qui peuvent remplacer dbOpenForwardOnly et dbReadOnly.

    Enlève les pour voir.
    Puis remis pareil....
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  18. #18
    Invité
    Invité(e)
    Par défaut
    Re

    On progresse, le trop de paramètre signifie qu'il manque un paramètre dans ta requête SQL pour qu'elle s'effetue, mais le reste à l'air de fonctionner, c'est bon signe

    aprés la ligne set rst ...
    met un debug.print rst pour voir ce que donne ta requête et regarde qu'elle information il te manque, à mon avis cela vient de l'appel de ta première requête.

    Starec

  19. #19
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    Ok je teste et j'arrive .....
    Mais je crois que t'a raison....
    Mais alors là... regrouper les deux en une
    enfin je teste , enfin j'essaie
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

  20. #20
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    bien, le debut.print n'affiche rien???
    J'ai aussi mis un espion et j'ai Nothing sur rst ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub DateRdv_AfterUpdate()
    Set db = CurrentDb
    Dim rst As DAO.Recordset
    Dim CalculEtat As String
    CalculEtat = "SELECT Sum(R_RegroupeValeurEntreDate.ValeurPourCalculBrutVeille) AS SommeDeValeurPourCalculBrutVeille FROM R_RegroupeValeurEntreDate;"
     
    Set rst = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly)
    Debug.Print rst
    If (rst("SommeDeValeurPourCalculBrutVeille") <= 4) Then
    Me.EtatRdv = "Veille"
    Else
    Me.EtatRdv = "Brut"
    End If
    End Sub
    Voilà le code en entier sous afterMaj de la liste .
    mais le code s'arrete toujours au (ligne jaune)
    Set rst = db.OpenRecordset(CalculEtat, dbOpenForwardOnly, dbReadOnly)
    avec la même réponse
    trop d'argument. 1attendu
    La connaissance ne vaut que si elle est partagée par tous et pour tous!
    Access et moi c'est mais en fait on s' bien !
    Ps: Je comprend très vite quand on m'explique longtemps !!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/05/2012, 12h31
  2. Réponses: 4
    Dernier message: 17/08/2011, 11h39
  3. Réponses: 3
    Dernier message: 06/11/2009, 11h13
  4. Réutiliser le résultat d'un SUM dans la requête
    Par Bobtop dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/07/2006, 11h12
  5. utiliser le resultat d'un SUM dans une variable
    Par Qapoka dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/05/2006, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo