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 :

Rétablir la requête d'origine à l'ouverture du formulaire [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut Rétablir la requête d'origine à l'ouverture du formulaire
    Bonjour,

    J'ai un formulaire que je filtre de manière dynamique avec une liste déroulante qui va modifier la requete source de ce formulaire.

    Sur l'evenement afterUpdate de ma liste, j'ajoute juste en VBA un parametre WHERE, la valeur de cette liste deroulante.

    Deux questions :

    A l'ouverture de mon formulaire, je dois redefinir la requête originale.

    J'ai du mal avec les DAO et je ne sais pas quelle est la meilleure façon d'écrire cette réinitialisation de la requete. J'ai fait comme ceci, est ce quelqu'un peut me corriger si ce n'est pas bon ?

    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
    Private Sub Form_Open(Cancel As Integer)
     
    Dim db As DAO.Database: Set db = CurrentDb
    Dim qdf As DAO.QueryDef: Set qdf = db.QueryDefs("R1")
    Dim strSQL As String
     
    strSQL = " SELECT..."
    qdf.sql = strSQL
    Me.RecordSource = "R1"
    qdf.Close
     
    Set qdf = Nothing
    Set db = Nothing
     
    End Sub
    Ensuite, sur l'évènement afterUpdate de ma liste déroulante, suis-je obligé de réécrire toute la requête alors que je veux seulement ajouter un "petit" WHERE ? Je veux dire, est ce qu'il n'y a pas moyen de faire plus léger en récupérant la requete originale et en lui ajoutant juste ce WHERE ?

    Si quelqu'un veut bien corriger la syntaxe aussi, parce que j'ai l'impression que ça ne va pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub L1_AfterUpdate()
     
    Dim strSQL As String
     
    strSQL = "SELECT...
    strSQL = strSQL & " WHERE (((T_VOIES.VOI) = '" & Me.L1 & "'))"
     
    CurrentDb.QueryDefs("R1").sql = sql
    Me.RecordSource = "R1"
    Me.Requery
     
    End Sub
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Tu peux faire plus simple, en concevant ta requête source pour qu'elle reste inchangée quels que soient les choix opérés dans les critères de sélection.

    Regarde ici : http://claudeleloup.developpez.com/t...-multicritere/
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Claude, tiens, ce lien me dit vaguement quelque chose

    C'est la première chose que j'ai essayé de faire car il s'agit juste de filtrer mes commerces par nom de rue, sauf que cette fois c'est une requête d'analyse croisée et ça ne fonctionne pas.
    Je dirais même plus ça ne fonctionne pas du tout

    Je me suis servi de ça http://loufab.developpez.com/tutorie.../analyseparam/ mais quand je rentre la ligne entière avec le "est Null" du lien ou tu m'as aidé (ici http://www.developpez.net/forums/d14...e-enregistree/), y compris dans les paramètres de la requête, je me prends un message d'erreur sur des [] Du coup je tente le VBA + SQL.

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    As-tu un exemple concret dans une db compatible Access2000 ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Merci de m'aider une fois de plus Claude.

    Il y a beaucoup de données confidentielles dans ma base, je mets ici une version "vidée" avec ce qu’il faut pour que tu vois mon problème.

    A l'ouverture de la requête ou du formulaire, le message d'erreur. J'ai peut être raté quelque chose car j’expérimente beaucoup en ce moment et c'est pas toujours évident vu mon manque d'expérience.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Moule à gaufre !

    Je veux bien savoir ce que tu as modifié pour que ça marche ?!

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    ... mais je n'avais encore rien modifié, je voulais seulement m'assurer que c'était le résultat visé.
    De toi à moi, pas terrible comme présentation, on pourrait sans doute mieux formater le formulaire.

    Quoi qu'il en soit, il suffit de ne pas mettre de paramètre à la requête et construire la clause « Where » à la volée.
    La requête :



    Quelques lignes de code pour modifier à la volée :

    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
    Option Compare Database
    Option Explicit
      Dim sSql As String  'définie en tête du module
                           '=> visible tant que le formulaire est ouvert
    Private Sub Form_Open(Cancel As Integer)
      'À l'ouverture on capte le modèle de SQL
      Dim q As QueryDef
      Set q = CurrentDb.QueryDefs("T_CommercesInstallations_Analyse croisée")
      sSql = q.SQL
    End Sub
    Private Sub filtreCboAdresse_AfterUpdate()
      If IsNull(Me.filtreCboAdresse) Then
          'le modèle
          Me.RecordSource = sSql
        Else
          'on remplace l'astérisque par l'item choisi dans la liste
          Me.RecordSource = Replace(sSql, "*", Me.filtreCboAdresse)
      End If
      Me.Requery
    End Sub
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    C'est bien le résultat visé.

    Pour la présentation en effet c'est très très moche mais pour le moment je ne m'occupe que des fonctionnalités, le formatage, c'est pour plus tard.
    Enfin si tu as des suggestions pour ce formatage je suis preneur !

    D'accord pour construire le WHERE à la volée, c'est bien ce que je demandais à l'ouverture de ce topic avec mes problèmes de syntaxe, pour que le code soit le plus léger possible.
    Je vois qu'il fallait déclarer la requête en variable globale, c'est bien ce qu'il me semblait sans trop savoir comment faire ensuite.

    Je fais quelques vérifications un peu plus tard et je passe en résolu si tout est OK.

    Je continue probablement sur mon topic au sujet des requêtes croisées (http://www.developpez.net/forums/d14...le-vers-excel/) car j'ai un peu de mal avec la structure de ma requête au niveau des colonnes, dynamiques ou statiques.

    En tous cas merci encore à toi Claude

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Une dernière chose, mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CpteDom("*";"T_CommercesInstallations_Analyse croisée")
    ne se met pas à jour après l'application du WHERE. J'ai oublié quelque chose ?
    Merci Claude.

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    La formule que tu montres vaut quand « T_CommercesInstallations_Analyse croisée » est la source. Dans la solution proposée, dès qu'un choix a été opéré, c'est sSql qui devient la source =>

    - rends le contrôle « txtNbre » indépendant

    - et adapte le code comme ceci :

    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
    Option Compare Database
    Option Explicit
      Dim sSql As String  'définie en tête du module
                           '=> visible tant que le formulaire est ouvert
    Private Sub Form_Open(Cancel As Integer)
      'À l'ouverture on capte le modèle de SQL...
      Dim q As QueryDef
      Set q = CurrentDb.QueryDefs("T_CommercesInstallations_Analyse croisée")
      sSql = q.SQL
      'Mise à jour du nombre de lignes ramenées
      'À ce stade, c'est la requête d'origine qui est la source
      Me.txtNbre = DCount("*", "T_CommercesInstallations_Analyse croisée")
    End Sub
    Private Sub filtreCboAdresse_AfterUpdate()
      If IsNull(Me.filtreCboAdresse) Then
          'le modèle
          Me.RecordSource = sSql
        Else
          'on remplace l'astérisque par l'item choisi dans la liste
          Me.RecordSource = Replace(sSql, "*", Me.filtreCboAdresse)
      End If
      'Mise à jour du nombre de lignes ramenées
      'À ce stade, c'est sSql qui est la source
      Me.txtNbre = Me.Recordset.RecordCount
    End Sub
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    C'est parfait Claude, je te remercie.

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

Discussions similaires

  1. requête sans enregistrement problème ouverture
    Par likinter dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/09/2008, 16h24
  2. Requête SQL (original non ?)
    Par Pingouin1313 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/09/2008, 09h22
  3. Requête de mise à jour - Ouverture base de données
    Par ade94 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 31/05/2007, 16h50
  4. Exécuter une requête mise à jour à l'ouverture
    Par picatchou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/09/2006, 13h53
  5. ouverture de formulaire à partir d'une requéte
    Par gaetanef dans le forum Access
    Réponses: 5
    Dernier message: 21/11/2005, 15h51

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