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 :

Condition logique sur une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut Condition logique sur une requête
    Bonjour à tous,

    Je souhaite mettre une alarme à l'ouverture de ma base Access. En gros, si la requête X a des résultats, afficher "Non OK". Sinon, si la requête X n'a pas de résultat, afficher "OK".

    L'idée serait donc de mettre une condition logique sur la requête X, du genre VRAIFAUX. mais je ne sais pas comment faire (je suis débutant sous Access).

    est-ce que quelqu'un sait comment faire svp ?

    Merci d'avance

  2. #2
    Membre habitué Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Points : 144
    Points
    144
    Par défaut
    Bonjour,

    Pour cela tu peux utiliser des recordset, n'hésite pas à consulter la faq

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Euh...comment dire...

    y a pas moyen d'écrire ça en SQL ou sous forme d'une requête (affichage access classique) parce que là, s'il faut en plus utiliser du vb, c'est pas gagné !

    J'ai pensé à un truc. Faire une autre requête comme ça :
    SELECT nom,prenom FROM table1 AND table2 /ce sont les tables dans lesquelles sont incrits les résultats de la requête X
    WHERE date = date+condition OR opérateur_evalué=faux;

    Ensuite, je récupère le résultat de cette requête (1 ou 0) et je génère l'affichage de mon alarme.

    Je vais tester. Qu'en penses-tu ?

  4. #4
    Membre averti Avatar de dr_feelgood
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 292
    Points : 373
    Points
    373
    Par défaut
    Je te propose d'utiliser la fonction Dcount.

    Si la requête est basée sur une seule table, l'utilisation de Dcount est assez simple et te retourne un nombre correspondant aux nombres d'enregistrements selectionnés. Tu écrira

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Dcount (...) > 0
      Then MsgBox "alarme"
    End if
    Si ta requête se base sur plusieurs tables, il faudra créer une requête selection l'enregistrer en lui donnant un nom
    Et indiquer dans Dcount qu'il s'agit de la requête machin
    .
    less is more

    vous pouvez faire une recherche dans le forum
    et également une recherche dans les FAQ

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    OK c'est cool ça marche avec le Dcount. Merci beaucoup

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Bon, ok, tout marche bien, j'ai fait plusieurs tests.
    Voilà le code que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Dcount ("numero_equipe" , "bonne_requete_alarmes") = 0
    Then msgbox("Evaluations à jour"), vbOKonly
    Else : msgbox("Evaluations non à jour")
    Endif
    Pour expliquer brièvement, j'ai une requête qui compte le nombre d'opérateurs qui doivent être évalués. Pour compter, j'utilise le champ "numero_equipe".
    L'intérêt de ces msgbox est de savoir dès qu'on ouvre la base si les évaluations sont à jour ou non.

    Maintenant, dans le cas où elles ne le sont pas, j'aimerais ajouter dans le msgbox les numéros d'équipes qui ne sont pas à jour.
    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox("Evaluations non à jour. Les équipes " & numero_equipe & " sont à évaluer.")
    Sauf qu'en mettant ce code, il m'indique numero_equipe = vide.

    Sachant qu'il y a 5 équipes, comment faire pour qu'il affiche bien la variable dans le msgbox ?

    Merci d'avance

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Je me suis dit que ça venait peut-être du fait qu'il ne reconnaisse pas la variable.
    Il faut peut-être la préciser ?
    du genre : [bonne_requete_alarmes]![numero_equipe].
    mais ça non plus, ça ne marche pas...peut-être pas la bonne syntaxe ?

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il te faut utiliser un recordset et boucler sur tous les enregistrements pour afficher le message

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    J'ai fait un recordset mais ça marche pas...voilà le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function InitialisationBase()
     
        Dim numero As Integer
        Dim rst As New ADODB.Recordset
     
     
        rst.Open ([bonne_requete_alarmes])
        If DCount("*", "bonne_requete_alarmes") = 0 Then
        MsgBox ("Evaluations à jour."), vbOKOnly
        Else: MsgBox "les équipes " & rst("numero_equipe") & " sont à évaluer"
        End If
     
        End Function
    et ça, ça marche pas. Il met en bug :
    "Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit avec les autres".

    J'ai regardé sur le tutoriel des recordset et suivi ce qu'il disait, mais bon, je maîtrise pas, y a peut-être une erreur de synthaxe ?

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    En effet, là tu utilises mal les recordsets. Je t'invite à consulter le tutoriel sur DAO pour plus de détails

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Yeeha ! Merci Tofalu ! Bon alors, j'ai réussi avec les recordsets. J'ai fait le test avec une entrée, ça affiche bien le numero_equipe que je veux. Par contre, quand j'ai plusieurs enregistrements dans ma requête, il m'affiche que la valeur du premier enregistrement. Voilà le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Function InitialisationBase()
     
        Dim numero As Integer
        Dim rst As DAO.Recordset
        Dim db As DAO.Database
     
    'Ouvre les enregistrements de ma requête "bonne_requete_alarmes
        Set db = CurrentDb
        Set rst = db.OpenRecordset("bonne_requete_alarmes", [dbOpenDynaset])
    'Affiche le numéro des équipes dont on trouve un enregistrement
        MsgBox "Les équipes " & rst.Fields("numero_equipe").Value & " ne sont pas à jour.", vbExclamation
     
        rst.Close
        db.Close
        Set rst = Nothing
        Set db = Nothing
     
        End Function
    Donc voilà, maintenant, j'aimerais qu'il m'affiche à la suite dans le msgbox les numéros de toutes les équipes...est-ce qu'il y a un attribut particulier autre que "Value" ? ou est-ce autre chose ?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Yeeeeeeeeeeeeeeeeeeeeeha !

    Ayé ! j'ai trouvé

    J'ai ajouté une boucle while not :

    While Not rst.EOF
    msgbox(...)
    rst.movenext
    Wend

    Trop fort ! Merci Tofula ! et les autres aussi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Condition if sur une requête
    Par marcus crassus dans le forum Access
    Réponses: 45
    Dernier message: 03/09/2014, 08h14
  2. Logique sur une requête MySQL
    Par Leduc08 dans le forum Requêtes
    Réponses: 7
    Dernier message: 12/02/2013, 16h08
  3. Somme sur conditions imbriquée dans une requête
    Par aleximan dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/01/2008, 18h05
  4. Condition sur une requête
    Par Dimitri_87 dans le forum SQL
    Réponses: 1
    Dernier message: 03/04/2007, 18h07
  5. Cherche la bonne condition sur une requête
    Par Tchupacabra dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/11/2006, 14h52

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