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

VBA Access Discussion :

requête ajout minutée [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut requête ajout minutée
    Bonjour,
    J'aimerais réaliser une "requete ajout" un peu particulière.
    je vais essayer d'etre explicite

    J'ai une requete qui affiche des données à l'instant T . Cette requete me donne un nombre de produits triés à l'instant T : un des champs de la requete contient le champ Maintenant()..

    J'aimerai créer un historique ( sous forme de Table ou Formulaire) de cette requete .
    Cette historique contiendrait le nombre de produits triés à l'instant T et ceci tous les 15 minutes.
    En somme, tous les 15 minutes, j'aurais le nombre de colis triés à l'instant T.

    J'ai essayé de créer une requete "ajout", mais je ne sais pas comment lancer une minuterie (tous les 15 minutes) qui enregistrerait les nouvelles données de cette requete sur la table (ou formulaire) qui contiendrait l'historique.

    j'espere avoir été claire car moi même je suis un peu perdu dans ces explications...

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Tu pourrais utiliser le Timer d'un formulaire.

    L'événement Sur Minuterie (On Timer) permet cela.

    Sinon, tu peux aussi utiliser le scheduler de Windows et appeler un macro dans ta base.

    Ou encore créer une procédure dans un module qui tourne en boucle et qui contrôle l'heure, à tout les quarts d'heure elle lance ta requête.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour marot,
    Pourrais tu détailler tes réponses.
    je connaissait la procédure "Timer" mais avant d'en arriver là, j'ai le soucis de la requete ajout.

    Comment incrémenter dans une "table B"( crée par une Requete "création de table"), les données issues de la requete A qui affiche un nombre de produits triés à l'instant T et ceci tous les 15 minutes.

    Je m'explique,
    tous les 15 minutes, la requete A donne un nombre de produits trié à l'instant T. Cette liste est transferé sur une table B (création requete de table).
    Puis 15 minutes plus tard, la requete A donne de nouveau un nombre de produits trié à l'instant T. Cette liste viendrait s'incrementer sur la table B à la suite de la liste précédemmmenet transferée. Et ainsi de suite

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Marot,
    Je suis tombé sur un dde tes discussions sur ce theme .
    Tu ecrivait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public sub ExecutreRequete()
       dim db as dao.database:set db=currentdb
       call db.querydefs("NomTaRequete1").execute 'Une instruction par requête
       call db.querydefs("NomTaRequete2").execute
       set db=nothing
    end sub
    pour l'excuter :

    J'ai une question :
    J'ai crée une requete ajout .
    Ou integrer ce module pour que ce module puisse transferer les données de la requete ajout (nommé par exemple " NomTaRequete1") sur la table A.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Comme je l'ai écrit,

    tu peux mettre ce code dans les instructions associées à l'évenement OnTimer d'un formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       dim db as dao.database:set db=currentdb
       call db.querydefs("NomTaRequeteAjout").execute 'Une instruction par requête
       set db=nothing
    Tu peux mettre l'appel dans une macro et appeler cette macro avec le schedueur de windows.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    macro ExecuterCode ExecutreRequete()
    Ou tu peux faire une boucle comme ceci :

    dans un module mettre un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       dim db as dao.database:set db=currentdb
     
       do
           if minute(time())=0 or minute(time())=15 minute(time())=30 minute(time())=45 then
              call db.querydefs("NomTaRequeteAjout").execute 'Exeécute ta requête d'ajout
          end if
          doevents
       loop
     
       set db=nothing
    mais ce n'est vraiment pas la meilleure méthode.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour marot,

    je ne comprend pas lorsque tu dis :
    ".....et appeler cette macro avec le schedueur de windows".
    Qu'est ce que le "schedueur" ?

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    marot,

    je suis complètement perdu

    J'essaie de suivre tes instructions mais en vain.
    Voila ce que j'ai fait :

    1) J'ouvre mon formulaire en mode création.
    Ce formulaire contient les données de ma requete de table qui elle même est issu d'une requete ajout intituléé "PROD-photo instantané du nbre colis en recirculation par chute".

    2) J'affiche les proprietés du formulaire

    3) je clique sur les ... du champ "minuterie"
    et j'enregistre la procédure suivante que j'ai nommée "recirculation":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub recirculation()
     
    Dim db As DAO.Database: Set db = CurrentDb
       Call db.querydefs("PROD-photo instantané du nbre colis en recirculation par chute").Execute 'Une instruction par requête
       Set db = Nothing
     
    End Sub
    4) en dessous de cette procédure, je crée une deuxième procédure qui permet d'appeler la première procédure "recirculation":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Timer()
    Call recirculation
    End Sub
    5) Enfin, dans les proprietés du formulaire, dans le champ " intervalle minuterie", j'inscrie 5000 .
    Ce qui normalement doit relancer la procédure "recirculation" tous les 5 secondes ( j'ai mis 5 secondes pour le test)

    Mais rien ne fonctionne...
    HELP...

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    À priori tout ce que tu as fait est correct.

    As-tu un message d'erreur ?

    si non, met un point d'arret sur Call recirculation (clique dans la marge à gauche, cela va mettre un gros point marron) puis ouvre ton formulaire en mode 'affichage'.

    Access va s'arréter sur la ligne avec le point puis en appluyant sur [f8] tu va pouvoir passer à l'instruction suivante. Cela s'appel faire du 'pas à pas'.

    Ainsi tu vas pouvoir voir comment s'exécute ton code et cela te donnera sans doute une piste de solution.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    je ne comprend pas lorsque tu dis :
    ".....et appeler cette macro avec le schedueur de windows".
    Qu'est ce que le "schedueur" ?
    Désolé c'est un franglicisme, un mélange d'anglais et de français. En bon français il s'agit du plannificateur de tâches (en anglais "task sceduler") qui est un utilitaire de windows qui permet d'éxécuter des tâches selon un horaire que tu définis. L'avanatge principal est que ton application Access n'a pas à être ouverte en permanence.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    j'ai suivie tes instruction avec le pas à pas.
    effectivement le code s'affiche mais rien de plus.
    Je n'aie pas d'erreur qui s'affiche.
    je précise que ma requete intitulée "PROD-photo instantané du nbre colis en recirculation par chute". est une requete ajout .
    je ne sais pas si cela a un incident sur le déroulement des opérations.

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Marot,

    J'ai procéde autrement mais là je me heurte à un autre problème .
    1) dans ma BDD , dans la rubrique "module" de la colonne "objet" , j'ai crée la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub bisrecirculation()
    Dim db As DAO.Database: Set db = CurrentDb
       Call db.QueryDefs("PROD-photo instantané du nbre colis en recirculation par chute").Execute 'Une instruction par requête
       Set db = Nothing
     
    End Sub
    2) dans les proprietés du formulaire , sur le champ "minuterie", je selectionne toujours "procédure evenementielle.
    Et j'insere le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Timer()
    Call bisrecirculation
    End Sub
    3) Toujours dans les proprietés du formulaire, dans le champ " intervalle minuterie", j'inscrie 5000 .
    Ce qui normalement doit relancer la procédure "bisrecirculation" tous les 5 secondes ( j'ai mis 5 secondes pour le test)

    4) Lorsque j'affiche le formulaire.
    Au bout des 5 seconde , un message d'erreur apparait :
    " erreur de compilation, Sub ou Function non definie"

    Je précise que lorsque j'execute pas à pas le code "bisrecirculation", cela fonctionne trés bien. Le formulaire intégre bien les nouvelles données de la requete ajout.
    mais lorsque je mets en application la fonction "call" alors le message d'erreur apparait.

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Marot,

    J'ai procéde autrement mais là je me heurte à un autre problème .
    1) dans ma BDD , dans la rubrique "module" de la colonne "objet" , j'ai crée la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub bisrecirculation()
    Dim db As DAO.Database: Set db = CurrentDb
       Call db.QueryDefs("PROD-photo instantané du nbre colis en recirculation par chute").Execute 'Une instruction par requête
       Set db = Nothing
     
    End Sub
    2) dans les proprietés du formulaire , sur le champ "minuterie", je selectionne toujours "procédure evenementielle.
    Et j'insere le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Timer()
    Call bisrecirculation
    End Sub
    3) Toujours dans les proprietés du formulaire, dans le champ " intervalle minuterie", j'inscrie 5000 .
    Ce qui normalement doit relancer la procédure "bisrecirculation" tous les 5 secondes ( j'ai mis 5 secondes pour le test)

    4) Lorsque j'affiche le formulaire.
    Au bout des 5 seconde , un message d'erreur apparait :
    " erreur de compilation, Sub ou Function non definie"

    Je précise que lorsque j'execute pas à pas le code "bisrecirculation", cela fonctionne trés bien. Le formulaire intégre bien les nouvelles données de la requete ajout.
    mais lorsque je mets en application la fonction "call" alors le message d'erreur apparait.

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Marot,
    dans la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub bisrecirculation()
    , J'ai remplacé Private par Public.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub bisrecirculation()
    Ce qui a pour conséquence de ne plus m'afficher le message d'erreur mais mon formulaire n'est toujours pas alimenter automatiquement . Comme si la requete ajout ne fonctionnait pas
    Je suis perdu..

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Si ce n'est pas résolu il faudrait peut-être ajouter une instrcrution

    ou

    pour forcer la mise à jour de l'affichage.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. [VB]requête ajout
    Par os_rouen dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 08/02/2006, 14h06
  2. Problème avec requête ajout
    Par mitnick32 dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 18h02
  3. [requête ajout]violation de clés
    Par Elro6475 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/02/2006, 12h37
  4. Réponses: 15
    Dernier message: 27/11/2005, 16h37
  5. requête Ajout
    Par lious dans le forum Langage SQL
    Réponses: 7
    Dernier message: 19/08/2004, 11h05

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