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

WinDev Discussion :

Evaluer la validité d'une requête (sans l'exécuter) [WD19]


Sujet :

WinDev

  1. #1
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut Evaluer la validité d'une requête (sans l'exécuter)
    Bonjour,
    Je cherche à valider les requêtes SQL générées par programmation... AVANT de les exécuter, histoire de ne pas déranger un serveur HFSQL pour rien.
    Et, sauf si mes yeux me trompent, je n'ai pas trouvé de commande autre que HExecuteRequete<SQL>...

    En effet, et c'est le mal des requêtes calculée (requêtes texte)/stockées en chaine, elles ne suivent pas forcément les mises à jour du MCD.
    On ne peut donc pas prédire le résultat avant d'être en situation... C'est ce dont on souhaite se prémunir.
    Et non, on ne va pas aussi les parser quand le moteur HFSQL le fait systématiquement.

    Au détour de mes recherches je suis tombé sur HPrepareRequete qui semblait prometteuse mais qui, je cite, "est optionnelle et ne peut être utilisée que sur des bases de données Client/Serveur (actuellement disponible sur AS/400)."... Pourquoi alors l'avoir nommé Hxxx si elle ne porte sur HFSQL ?

    Bref, si une solution qui n'est pas une bidouille existe (HEXecute sur un alias vide pour ne pas retourner de résultat et aller donc trés vite, ou pire, ajouter un TOP 1...), je suis très curieux.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    556
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 556
    Points : 1 198
    Points
    1 198
    Par défaut
    Bonjour,

    Il n'y a pas à ma connaissance de contrôle possible sur la syntaxe SQL, pour une raison simple : chaque éditeur a implémenté une des normes ISO pour SQL (sachant que la dernière selon Wikipédia date de 2011), mais à rajouter leur surcouches propriétaire, ce qui fait qu'un mot clef SQL comme "DECODE" par exemple existe pour un SGBD et pas un autre.

    Du coup, comment certifier qu'une requête valide sur MS-SQLSERVER fonctionnera sur ORACLE ? (et encore moins sur HFSQL )

    Bref... il va donc falloir ruser.

    HPreparexxx() est pour moi simplement l'implémentation de PCSOFT de fonction de SGBD déjà existante sur d'autre éditeur de SGBD. D'où ça non disponibilité selon le SGBD car l'éditeur du SGBD n'ayant pas encore "réfléchit" dessus.


    PS : pour aller un peu plus loin, voici un article intéressant qui date un peu sur l'interopérabilité entre différent SGBD : http://sqlpro.developpez.com/cours/sqlaz/fonctions/

  3. #3
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Merci Ry_yo.

    Je pensais plus à une chose du genre EXPLAIN de MySQL ou prepare() de MySQLi dans PHP.
    Le hic est qu'on n'a rien que ce soit au niveau HFSQL ni WLangage alors que c'est la première action du moteur que de vérifier la syntaxe.

    Ca sent bon la RequêteAuST...

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    L'ordre EXPLAIN est disponible (depuis la version 18 je crois, mais ça existe en 19 pour sûr)... Et il y a un petit exemple d'utilisation dans WinDev ("WD Analyseur Explain HFSQL").
    Si ça peut vous aider...

    Cordialement.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Si vous faites un hExecuterequeteSQL la première action sera de checker la syntaxe SQL (coté client) avant d'attaquer le serveur... d'où la présence de la constante hRequeteSansCorrectionHF qui permet d'outrepasser ce premier contrôle). Donc le comportement natif de la fonction répond à votre exigence technique... enfin je crois

  6. #6
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    merci Michel.
    Effectivement, à cela près qu'en cas de succès le serveur est interrogé...
    L'objet est de simplement vérifier la syntaxe et ce SANS interroger le serveur inutilement.
    Le problème ne survient pas en cas d'erreur car effectivement, le coté client de HExécuteRequeteSQL déclenche l'erreur voulue

    En revanche si la syntaxe est valide, on va devoir attendre que le serveur exécute la requête... inutilement dans ce cas. C'est là l'objet de ma demande.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    D'accord.... vous avez raison ça ne réponds pas à votre problématique.... je ne connais pas de solution.

  8. #8
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    +1 djejackk !
    C'est bien cela

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

Discussions similaires

  1. tester la validité d'une requête sans l'effectuer
    Par Jasmine80 dans le forum SGBD
    Réponses: 7
    Dernier message: 01/06/2012, 14h44
  2. [Toutes versions] Connaître les champs d'une requête sans l'exécuter
    Par guidav dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/12/2011, 13h58
  3. RecordSource avec une requête sans résultat
    Par temar dans le forum Access
    Réponses: 4
    Dernier message: 23/05/2006, 18h13
  4. Exécution d'une requête sans stocker les transactions
    Par Actarus69 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/03/2006, 12h45

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