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

HyperFileSQL Discussion :

[WD12] Exécuter une requête basée sur une autre requête


Sujet :

HyperFileSQL

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut [WD12] Exécuter une requête basée sur une autre requête
    Bonjour,

    Vous arrive-t-il de créer des requêtes dans l'éditeur dans le but de les utiliser dans d'autres requêtes ?

    Dans Access, cette pratique est évidente et simplissime.

    Mais qu'en est-il avec HyperFile Classic ou Client/Serveur ?

    Bien sûr, j'ai fait plusieurs essais avant de poser cette question.
    Il se trouve que lorsque j'exécute une requête qui en utilise une autre en appuyant sur le bouton GO, alors j'ai une erreur: le 'fichier <nom de ma requête> est inconnu' !

    Merci pour vos pistes.

    [EDIT]
    J'ai mis au propre quelques informations concernant le fonctionnement d'une application WinDev avec le moteur HyperFile dans la discussion suivante:
    http://www.developpez.net/forums/d91...eur-hyperfile/
    [/EDIT]

    _

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Re-bonjour,
    Citation Envoyé par =JBO= Voir le message
    Vous arrive-t-il de créer des requêtes dans l'éditeur dans le but de les utiliser dans d'autres requêtes ?
    Apparemment personne n'utilise ce type de fonctionnalité avec HF...

    Et pourtant, imaginons l'union de différents "fichiers tables", sur laquelle on applique un regroupement et qu'on utilise dans une sous-requète de sélection...
    (bon, j'exagère un peu... ).

    Cela se fait facilement avec 3 requêtes:
    - la requête A réalise l'UNION sur les "fichiers tables",
    - la requête B effectue le GROUP BY sur A,
    - la requête C utilise B dans une clause:
    ____ WHERE rubrique IN (SELECT B.rubrique FROM B)

    Comment faites-vous avec HyperFile ???
    _

  3. #3
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    J'ai déjà utilisé une requête dans une requête, mais je ne me souviens plus pourquoi, j'ai arrêté. Peut-être à cause d'un problème du genre...
    «Un problème bien défini est un problème à moitié résolu.»

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Ici je ne parle que de requêtes qui sont enregistrées dans le projet.

    Pour répondre à la question, il faut distinguer (1) le test d'une requête, et (2) son utilisation dans une application.

    (1) Test de requêtes imbriquées

    En règle générale, on peut tester directement une requête B qui fait référence à une autre requête A du projet (toutes deux créées avec l'éditeur et analysées par WinDev).
    Je dis en "règle générale", parce que si la requête A est une requête "sans correction" (donc pas analysée par WinDev) alors il faut d'abord tester la requête A et laisser ouverte la fenêtre d'aperçu du résultat, puis ensuite il est possible de tester la requête B.

    D'autre part, je n'ai pas réussi à tester l'imbrication à 3 niveaux:
    Requête C, utilise requête B qui utilise requête A.
    Impossible d'afficher l'aperçu des données de la requête C (même avec les aperçus de A et B ouverts).

    (2) Utilisation des requêtes imbriquées dans une application

    Alors là, il n'y a pas le choix.
    Il faut exécuter une à une toutes les requêtes en commençant par la plus imbriquée et en suivant les dépendances.

    Pour récupérer les données de la requête B qui utilise la requête A, il faut exécuter le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HExécuteRequête(A)
    HExécuteRequête(B)
    Et j'ai vérifié que ça fonctionne correctement à 3 niveaux d'imbrication dans l'application (même s'il était impossible de tester !).


    Voilà ce que j'ai constaté avec WinDev 12.
    D'autres peuvent-ils confirmer ou infirmer cela, notamment pour WinDev 14 ?

    [HUMEUR !]
    Est-ce que la version 15 sera aussi pitoyable ?

    Parce que faire une démo sur 15 milliards de lignes c'est bien joli...
    mais ne pas arriver à tester/exécuter directement 3 malheureuses requêtes SELECT imbriquées, là franchement... zéro pointé !
    Et même...
    [/HUMEUR !]

    Pour l'heure, tant pis.
    Mais je trouve que c'est vraiment dommage et très décevant.
    _

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    C'est pas quelque chose que j'ai l'habitude de faire, parce que niveau perf je crois que ça plombe, mais chez moi, quand j'ouvre l'éditeur de requête assisté, il me propose bien mes requêtes.
    J'ai peut-être une différence, c'est que mes requêtes sont d'abord créées dans l'analyse, puis partagées avec mon code.

    Ça expliquerait pourquoi quand l'aperçu est lancé ça fonctionne. (je pense que le fait de lancer l'aperçu déclare la requête au moteur HF)

    Par contre, niveau performances, j'ai bien peut que ce genre de chose soit à éviter autant que possible.

    J'ai déjà eu à faire ce genre de chose (en prévenant le client qu'il attendra 5 minutes avant d'avoir sa réponse), et j'ai utilisé une requête définie dans le code. Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT SUB1.Champ1
    FROM (
    SELECT A1 AS Champ1
    FROM Table1
    UNION
    SELECT A2 AS Champ1
    FROM Table2
    ) AS Sub1
    GROUP BY Sub1.Champ1
    HAVING...

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Merci Bowen pour ta réponse.

    Une requête peut (1) être définie localement au projet, ou (2) être définie dans l'analyse pour être partagée avec le projet.

    Citation Envoyé par Bowen Voir le message
    [...] chez moi, quand j'ouvre l'éditeur de requête assisté, il me propose bien mes requêtes.
    J'ai peut-être une différence, c'est que mes requêtes sont d'abord créées dans l'analyse, puis partagées avec mon code.

    Ça expliquerait pourquoi quand l'aperçu est lancé ça fonctionne. (je pense que le fait de lancer l'aperçu déclare la requête au moteur HF)
    L'éditeur de requête "voit" aussi très bien les requête définies localement au projet.

    Existerait-t-il des différences à l'exécution des requêtes selon qu'elles sont locales au projet, ou définies dans l'analyse ?

    En HyperFile Classic, y-a-t-il un intérêt à définir les requêtes dans l'analyse ?
    _

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par =JBO= Voir le message

    (2) Utilisation des requêtes imbriquées dans une application

    Alors là, il n'y a pas le choix.
    Il faut exécuter une à une toutes les requêtes en commençant par la plus imbriquée et en suivant les dépendances.

    Pour récupérer les données de la requête B qui utilise la requête A, il faut exécuter le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HExécuteRequête(A)
    HExécuteRequête(B)
    Et j'ai vérifié que ça fonctionne correctement à 3 niveaux d'imbrication dans l'application (même s'il était impossible de tester !).


    Voilà ce que j'ai constaté avec WinDev 12.
    D'autres peuvent-ils confirmer ou infirmer cela, notamment pour WinDev 14 ?
    Depuis ce message, je suis enfin tombé sur la page de l'aide en ligne qui traite du sujet: cela s'appelle une Requête de requête.
    Ce mode de fonctionnement concerne WD9 et suivants.

    Citation Envoyé par =JBO= Voir le message

    Existerait-t-il des différences à l'exécution des requêtes selon qu'elles sont locales au projet, ou définies dans l'analyse ?

    En HyperFile Classic, y-a-t-il un intérêt à définir les requêtes dans l'analyse ?
    Si j'ai bien compris, définir une requête dans l'analyse n'a de réelle utilité qu'avec HF C/S. A partir d'une analyse, on peut déployer sur le serveur des collections de procédures (qui seront des procédures stockées) ainsi que des requêtes (qui seront des requêtes stockées)

    Les procédures stockées peuvent exécuter des requêtes stockées.
    Et inversement, les requêtes stockées peuvent exécuter des procédures stockées.

    En revanche, en HF Classic il n'y a aucun intérêt à définir une requête dans l'analyse (sauf en prévision d'une migration en HF C/S ?).
    _

  8. #8
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut Imbrications de requêtes
    Intéressant tout celà !

    Je vous rejoints sur le plan absence de simplicité comparativement à ACCESS qui lui, propose un assistant simple pour la création d'une "requête de non correspondance" entre 2 tables.

    Je pense finalement que cette imbrication de requêtes est malheureusement incontournable lorsque que l'on veut procéder à un échange de données entre 2 tables, suite à une sélection dans une combo actualisée.

    Contrairement à vos propos, il me semble que ce principe de vase communiquant peut être utiliser assez fréquemment (c'est à dire, je sélectionne une ligne dans une combo par exemple, celle-ci va se loger dans la table réceptrice et de fait, disparaître de la liste combo). Idem pour l'opération inverse bien sur !

    Le tout ne fonctionnant finalement que s'il y a initialisation dans l'ordre des requêtes imbriquées par la fonction "HExécuteRequête"

    Y a t'il plus simple ? A suivre ...
    La patience est d'or, l'aide est inestimable ...

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

Discussions similaires

  1. [AC-2007] Requête basée sur une liste déroulante
    Par Cinesra dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 08/02/2011, 16h41
  2. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  3. [AC-2007] Ajouter des lignes à une liste basée sur une requête
    Par Cinesra dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2010, 13h19
  4. Réponses: 4
    Dernier message: 24/07/2007, 12h12
  5. Réponses: 2
    Dernier message: 29/03/2007, 11h47

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