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 :

Timer sur requête [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut Timer sur requête
    Bonjour à tous.
    est-il possible d'automatiser une requête, avec une sorte de "timer" pour que celle-ci se reproduise à intervalle régulier, sans intervention de l'utilisateur.
    Si oui, quelle piste à explorer..?

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Avec du VBA...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub Attendre(Optional iSecondes As Integer = 0, Optional bHrglass As Boolean = True)
       Dim lfin As Long
       If bHrglass = True Then DoCmd.Hourglass bHrglass
       lfin = Timer + iSecondes
       Do
          DoEvents
       Loop Until Timer >= lfin
       If bHrglass = True Then DoCmd.Hourglass False
    End Sub
    Et dans ton code pour la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Timer1:
        Attendre (30 * 60) 'attente de 30mn
        DoCmd.OpenQuery "REQUETE"
        GoTo Timer1
    @+.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    bonjour,
    et merci zoom61 pour cette piste de travail.
    dans cette hypothèse, Access doit rester "ouvert" en permanence bien sur.
    Par contre, je ne comprends pas bien, la requêteSQL doit être crée en VBA..?
    Merci

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Non, DoCmd.OpenQuery "REQUETE", c'est la commande qui permet d'appeler une requête.

    @+.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    Re bonjour,
    et re-merci !
    malgré tout, je crois qu'il va falloir que je passe quand même par le vba, car j'ai besoin d'une requête qui selon le résutat envoie un e-mail à une ou plusieurs adresses définies au départ avec comme contenu le résultat de la requête.
    En clair, j'ai une table qui se nomme "reactifs_volatils" avec des champs:
    "ReactRef", "React_Utilisation", "React_Valeur".
    cette table est mise à jour plusieurs centaine de fois par jour par des dizaines d'utilisateurs.
    Mon but est de déclancher l'envoi d'un mail auto si la valeur de "React_Valeur"est > à 2 avec dans le mail un message du style:
    Attention : pour "ReacRef"et React_Utilisation", la valeur est supérieure à 2("React_Valeur")
    je souhaiterais que cette procédure se répète toutes les 30 minutes par exemple.
    Je crois qu créer la requête en vba est trop dur pour moi..

  6. #6
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Voici le code pour exécuter une requête en VBA :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL = "SELECT ReactRef, React_Utilisation, React_Valeur FROM reactifs_volatils"
    Set oSQL = CurrentDb.OpenRecordset(SQL)
    Do Until oSQL.EOF
        If Dir(oSQL("React_Valeur")) > 2 Then
            'Commande d'envoi des mails
        End If
        oSQL.MoveNext
    Loop

    @+.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    je rougis de mon ignorance..!!
    mais où dois-je placer ces codes..?
    faut-il que je crée un module à cet effet..?

  8. #8
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Timer1:
        Attendre (30 * 60) 'attente de 30mn
        SQL = "SELECT ReactRef, React_Utilisation, React_Valeur FROM reactifs_volatils"
        Set oSQL = CurrentDb.OpenRecordset(SQL)
        Do Until oSQL.EOF
            If Dir(oSQL("React_Valeur")) > 2 Then
                'Commande d'envoi des mails
            End If
            oSQL.MoveNext
        LoopSQL 
        GoTo Timer1

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    oui,
    j'ai bien fait ça, j'ai bien compris la structure de l'ensemble,
    mais je ne sais pas où placer cet ensemble pour que ça fonctionne...
    dans insertion/module..?

  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 : 41
    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
    Oui, dans un module ou derrière l'évènement onclick() d'un bouton

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    Bonjour,
    alors j'ai créé un module que j'ai nommé "query".
    et dans ce module j'ai mis:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Public Sub Attendre(Optional iSecondes As Integer = 0, Optional bHrglass As Boolean = True)
       Dim lfin As Long
       If bHrglass = True Then DoCmd.Hourglass bHrglass
       lfin = Timer + iSecondes
       Do
          DoEvents
       Loop Until Timer >= lfin
       If bHrglass = True Then DoCmd.Hourglass False
    End Sub
     
     
    Private Sub query()
    Timer1:
        Attendre (30 * 60) 'attente de 30mn
        'DoCmd.OpenQuery "REQUETE"
     
    SQL = "ma requête dont j'ai fait un copié/collé du SQL généré"
     
    Set oSQL = CurrentDb.OpenRecordset(SQL)
    Do Until oSQL.EOF
        If Dir(oSQL("React_Valeur")) > 2 Then
            'Commande d'envoi des mails
            MsgBox ("ok ça marche")
        End If
        oSQL.MoveNext
    Loop
    GoTo Timer1
    End Sub
    il ne se passe rien..ça ne marche pas.!!
    je ne sais pas pourquoi..ça doit surement venir du fait que je n'ai pas tout compris..

  12. #12
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Il faut que tu mettes le code du module query dans un formulaire sur l'évènement chargement et surtout laisser ton formulaire ouvert.

    @+.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    encore merci pour l'aide et le soutien..
    donc j'ai laissé dans un module nommé "query"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Sub Attendre(Optional iSecondes As Integer = 0, Optional bHrglass As Boolean = True)
       Dim lfin As Long
       If bHrglass = True Then DoCmd.Hourglass bHrglass
       lfin = Timer + iSecondes
       Do
          DoEvents
       Loop Until Timer >= lfin
       If bHrglass = True Then DoCmd.Hourglass False
    End Sub
    j'ai créé un formulaire (Formulaire1)
    dans lequel j'ai mis sur Form_Load:
    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
    19
    20
    21
    22
     
    Private Sub Form_Load()
    Timer1:
        Attendre (1 * 60) 'attente de 1mn
        'DoCmd.OpenQuery "REQUETE"
     
     
     
    SQL = "ma requête dont j'ai fait un copié/collé du SQL généré"
     
     
     
    Set oSQL = CurrentDb.OpenRecordset(SQL)
    Do Until oSQL.EOF
        If Dir(oSQL("React_Valeur")) >  2 Then
            'Commande d'envoi des mails
            MsgBox ("CA MARCHE")
        End If
        oSQL.MoveNext
    Loop
    GoTo Timer1
    End Sub
    j'ai modifié le timer pour que le test se fasse toutes les minutes afin de ne pas attendre trop longtemps..
    Lorsque je lance l'ouverture de mon formulaire, il ne se passe rien, il ne s'affiche pas...juste un sablier/attente puis au bout d'1 minute,
    message "Erreur d'exécution 3061" trop peu d'arguments: 1 attendu
    au débogage, j'ai un pb sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set oSQL = CurrentDb.OpenRecordset(SQL)
    ça vient du sql de ma requête..? elle marche bien pourtant en mode "normal"

  14. #14
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Fait voir ton code SQL !

    @+.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    Ci dessous le SQL de ma reqête.
    ça ne correspond pas à celui du modèle initial (c'est la requête définitive)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL = "SELECT dbo_D_Encounter.lastName AS Nom, dbo_D_Encounter.firstName AS Prénom, dbo_PtLabResult.terseForm AS INR, dbo_PtLabResult.chartTime AS [Date/heure INR], dbo_PtCensus.clinicalUnitId FROM ((dbo_D_Encounter INNER JOIN dbo_PtLabResult ON dbo_D_Encounter.encounterId = dbo_PtLabResult.encounterId) INNER JOIN dbo_D_Attribute ON dbo_PtLabResult.attributeId = dbo_D_Attribute.attributeId) INNER JOIN dbo_PtCensus ON dbo_D_Encounter.encounterId = dbo_PtCensus.encounterId WHERE (((dbo_PtCensus.clinicalUnitId)=6) AND ((dbo_PtCensus.outTime) Is Null) AND ((dbo_D_Attribute.shortLabel)=inr));"
    et je souhaite déclancher l'envoi mail si on trouve des valeurs >2 dans le champ "terseForm" de la table PtLabresult" donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Dir(oSQL("terseForm")) > 2  Then

  16. #16
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Remplace ((dbo_D_Attribute.shortLabel)=inr)) par ((dbo_D_Attribute.shortLabel)='inr')) !

    @+.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    j'ai maintenant Erreur d'exécution 3265 / élément non trouvé dans cette collection..

  18. #18
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Tu as mis If Dir(oSQL("terseForm")) > 2 Then, cela ne serait pas plutôt If Dir(oSQL("INR")) > 2 Then

    @+.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 388
    Points : 72
    Points
    72
    Par défaut
    à vrai dire, j'avais essayé de passer INR comme paramètre et j'avais eu comme message d'erreur:
    Erreur d'exécution 13 / Incompatibilité de type.
    A bien y réfléchir, cela ne peut 'il pas venir du fait que les résultats sont des nombres à virgules avec 2 décimales tandis que dans la requête SQL en VBA on a mis un point..?
    seulement ça plante si je remplace le point par virgule..

  20. #20
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Oups, c'est moi, il faut mettre If oSQL("INR") > 2 Then.

    @+.

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

Discussions similaires

  1. [Toutes versions] Timer sur requête
    Par naphta dans le forum Modélisation
    Réponses: 4
    Dernier message: 27/07/2009, 09h27
  2. Pb sur Requête croisée Access
    Par Proview dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 17h33
  3. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 17h53
  4. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 12h33
  5. Besoin d'aide sur requête croisée
    Par keawee dans le forum Access
    Réponses: 7
    Dernier message: 18/11/2004, 09h46

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