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 :

Interférence entre OpenQuery et OpenRecordset ?


Sujet :

VBA Access

  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut Interférence entre OpenQuery et OpenRecordset ?
    Bonjour à tous,

    J'ai le code suivant à l'ouverture de ma base qui plante avec l'erreur "Aucun enregistrement en cours" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DoCmd.OpenQuery "ADD_Comm_Nouvelle", , acReadOnly
     
    Dim rst As DAO.Recordset
    myREQ = "SELECT Comm, [Date envoi] FROM REQ_Comm_Nouvelle"
    Set rst = CurrentDb.OpenRecordset(myREQ, dbOpenDynaset)
     
    rst.MoveFirst
    While Not rst.EOF
    <mon traitement>
    rst.MoveNext
    Wend
    La seule solution que j'ai trouvée et qui fonctionne est d'exécuter l'OpenQuery après la gestion du RecordSet (c'est-à-dire après le WEND) mais j'aimerais comprendre pourquoi cela ne fonctionne pas dans l'autre sens.
    Quelqu'un a une idée svp ?

    Merci !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Salut,

    Pourquoi est ce que tu fait une moveFirst juste après avoir ouvert le recordset ?
    Ca ne sert à rien, à l'ouverture, il est automatiquement positionné sur le 1er enregistremnt (s'il y en a un).

    Et vu qu'il n'a l'air de rien contenir, moveFirst plante.

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut
    Effectivement j'ai supprimé le MoveFirst mais cela ne change pas ma question

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 622
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    En fait ça doit dépendre du traitement que vous effectué dans votre boucle :

    Pouvez vous le détailler ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonjour,

    Ce qu'il faudrait déterminer avant le traitement c'est l'interaction réelle entre la query insert et select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DoCmd.OpenQuery "ADD_Comm_Nouvelle", , acReadOnly
     
    Dim rst As DAO.Recordset
    myREQ = "SELECT Comm, [Date envoi] FROM REQ_Comm_Nouvelle"
    Qu'est ce que tu veux faire avant la boucle.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut
    Merci pour vos réponses.

    L'OpenQuery insère des enregistrements vers une autre table. Dans le deux cas, la source est la même requête REQ_Comm_Nouvelle

    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
     
        Dim i As Integer
        Dim max_i As Integer
        Dim tabcomm(100, 2) As String
     
        ' Ajout des nouvelles communications envoyées dans TABL_Comm
        DoCmd.OpenQuery "ADD_Comm_Nouvelle", , acReadOnly
        AjouterLOG ("MAJ auto au démarrage : ADD_Comm_Nouvelle")
     
        ' Recherche des infos des nouvelles communications
        Dim rst_c As DAO.Recordset
        myREQ = "SELECT Comm, [Date envoi] FROM REQ_Comm_Nouvelle"
        Set rst_c = CurrentDb.OpenRecordset(myREQ, dbOpenDynaset)
     
        i = 0
        max_i = 0
        While Not rst_c.EOF
            i = i + 1
            tabcomm(i, 0) = rst_c.Fields("Comm").Value
            tabcomm(i, 1) = rst_c.Fields("Date envoi").Value
            rst_c.MoveNext
        Wend
        max_i = i

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Et REQ_Comm_Nouvelle ?

    Si on a pas une vue précise de l'ensemble c'est le jeu de piste...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 288
    Par défaut
    Salut
    Ligne 6 (vide) de votre code Post#1, placez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If rst.RecordCount = 0 Then Exit Sub

  9. #9
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut
    OK je vais tester dès que possible, merci !

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Si le but c'est de ne plus avoir de message d'erreur c'est vrai qu'en faisant un recordcount sur la 6 le but sera atteint.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 580
    Par défaut
    Bonjour,
    Qu'est sencé faire ADD_Comm_Nouvelle?

  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 622
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Oui, ça manque d'info (quelle structure pour les requêtes ?) et pas mal de questions au niveau des choix dans le code (Openquery, tableau, ..):

    Sinon, comment le code est exécuté au démarrage de la base (sur quel événement..) ?

    Cdlt
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Heu, la propriété recordCount n'est fiable que pour les recordsets issu d'une table, pour les recordset issu d'une requête, elle n'est à jour que si l'on a parcourus tous les enregistrements, ce qui niveau performances est completement pourri.

    Il y a un moyen de savoir si un recordset est vide: Tester Bof et Eof.
    S'ils sont tous les deux vrai, alors le recordset est vide.

  14. #14
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut
    Voilà la requête ADD_Comm_Nouvelle exécutée sur Form_Load

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO TABL_Comm ( nom_comm, date_comm, date_maj )
    SELECT REQ_Comm_Nouvelle.Comm, REQ_Comm_Nouvelle.[Date envoi], Now()
    FROM REQ_Comm_Nouvelle;

  15. #15
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 580
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CurrentDb.execute "ADD_Comm_Nouvelle"
     
    Dim rst As DAO.Recordset
    myREQ = "SELECT Comm, [Date envoi] FROM REQ_Comm_Nouvelle"
    Set rst = CurrentDb.OpenRecordset(myREQ, dbOpenDynaset)
     
    While Not rst.EOF
    <mon traitement>
    rst.MoveNext
    Wend

  16. #16
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Citation Envoyé par sca42 Voir le message
    Voilà la requête ADD_Comm_Nouvelle exécutée sur Form_Load

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO TABL_Comm ( nom_comm, date_comm, date_maj )
    SELECT REQ_Comm_Nouvelle.Comm, REQ_Comm_Nouvelle.[Date envoi], Now()
    FROM REQ_Comm_Nouvelle;
    @sca42 : J'ai comme une impression de déjà vu. Pas toi ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  17. #17
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut
    Je ne comprends pas.
    On me demande ce que fait la requête donc je donne le détail.
    Je l'ai posté deux fois ?

    Citation Envoyé par loufab Voir le message
    @sca42 : J'ai comme une impression de déjà vu. Pas toi ?

  18. #18
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    On va reprendre :

    1) ça on part du principe que tu as vérifié que ça fonctionnait et que ça ajoute bien les ernegistrements dont tu as besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.execute "ADD_Comm_Nouvelle"
    2) ça c'est la partie qui alimente le rst
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim rst As DAO.Recordset
    myREQ = "SELECT Comm, [Date envoi] FROM REQ_Comm_Nouvelle"
    Set rst = CurrentDb.OpenRecordset(myREQ, dbOpenDynaset)

    3) ça c'est le truc qui plante.
    4) ça c'est pas notre problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    While Not rst.EOF
    <mon traitement>
    rst.MoveNext
    Wend
    Donc logiquement le problème se trouve au point 2. Ton Rst est vide parce que ta requête ne renvoie rien.

    Les questions sont :
    Qu'est-ce qu'il y a dans la requête "REQ_Comm_Nouvelle" que tu veux pas nous montrer ?
    Pourquoi elle ne renvoie rien ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  19. #19
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut
    Voilà REQ_Comm_Nouvelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT REQ_Comm_Unique.Comm, REQ_Comm_Unique.[Date envoi]
    FROM REQ_Comm_Unique LEFT JOIN TABL_Comm ON REQ_Comm_Unique.[Comm] = TABL_Comm.[nom_comm]
    WHERE (((TABL_Comm.nom_comm) Is Null));
    Je n'ai pas dit qu'elle ne renvoyait rien.
    J'ai dit qu'elle ne renvoyait rien quand elle était placée après l'OpenQuery, ce qui n'a aucun sens car il n'y a pas de lien entre les deux.

    Mais inutile de passer du temps sur un sujet alors que j'ai trouvé une solution

  20. #20
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 288
    Par défaut

    Pensez à clôturer le sujet.

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

Discussions similaires

  1. [XL-2007] Interférence entre Collection et OLEObject. (bug ?)
    Par methe2983 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/04/2009, 15h53
  2. [Cookies] Empecher interférences entre sessions php
    Par reventlov dans le forum Langage
    Réponses: 4
    Dernier message: 04/06/2008, 11h33
  3. Interférence entre deux programmes
    Par eyquem dans le forum Général Python
    Réponses: 1
    Dernier message: 01/06/2008, 15h10
  4. Différence de résultats d'une requête entre OpenQuery et ADO
    Par hellbilly dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/04/2006, 18h29
  5. Interférence entre références ?!
    Par janou dans le forum Access
    Réponses: 2
    Dernier message: 12/12/2005, 18h36

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