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 :

[WD10] comment exécuter une requete SQL en hyperfile ?


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut [WD10] comment exécuter une requete SQL en hyperfile ?
    Bonsoir

    je me mets à l'hyperfile car a priori, mon application gagnera considérablement en temps d'exécution...
    pour le moment, mon appli travaille avec un fichier txt, et "scanne" le fichier txt pour trouver ce qu'il faut ....

    enfin bref, je voudrai essayer de comprendre les requetes sql
    j'ai créé une BDD hyperfile test que voici ci dessous en screen :


    ma BDD porte le nom de dictionnaire_test

    et maintenant, je voudrais trouver la ligne pour laquelle la rubrique 2 = 5
    j'ai codé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(dictionnaire_test,"SELECT FROM dictionnaire_test WHERE dictionnaire_test.rubrique2 ='5'")
    alors j'attends d'avoir 2 en retour, mais ca me renvoie "0" :s

    et ensuite, je voudrais avoir la ligne pour laquelle j'ai 4 pour la rubrique 1 et 5 pour la rubrique 2 ....

    j'ai fouillé dans l'aide, mais c vraiment succin :s
    merci d'avance

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Salut,

    Avant de t'attaquer à tout ça, je crois qu'il est nécessaire que tu fasses tous les exercices de l'auto-formation.

  3. #3
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Donne nous la totalité du code stp
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Lo² Voir le message
    Salut,
    Avant de t'attaquer à tout ça, je crois qu'il est nécessaire que tu fasses tous les exercices de l'auto-formation.
    je suis partant, c'est la meilleure façon d'apprendre
    pour essayer de comprendre comment marche les fonctions de WD, je fais bcp de pas à pas avace des petits tests justement

    mais où puis trouver cette auto formation stp ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par mogwai162 Voir le message
    Donne nous la totalité du code stp
    pour le moment y a rien :s
    j'ai juste créé une BDD, et pour apprendre comment marche l'HF, j'essaye de faire une simple requete pour récupérer la ligne tu tableau

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Tu as avec l'achat de WD, plein de bouquins dont un qui est intitulé "Auto-Formation".

    Si tu n'as pas, il y a des liens sur ce post (tout en bas) :
    http://www.developpez.net/forums/d71...debuts-windev/

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    dans l'aide tu dois pouvoir trouver des exemples de requête SQL, mais avec Windev tu peux aussi interroger les données sans SQL avec les fonctions WLanguage par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HLitRecherchePremier(dictionnaire_test,Rubrique2,5)
    // Puis tu traite le résultat
    SI HTrouve(dictionnaire_test) ALORS
       // ton code de récupération par exemple SAI_Champ = dictionnaire_test.Rubrique1
    FIN
    Sinon en SQL tu peux ajouter les rubriques à retourner après la clause SELECT
    SELECT * FROM ...
    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    et avec SELECT * FROM, ca donnerait quoi le code ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Tu dois ensuite lire le résultat de la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HExécuteRequêteSQL(Req_dictionnaire_test,"SELECT * FROM dictionnaire_test WHERE dictionnaire_test.rubrique2 ='5'")
    SAI_Champ = Req_dictionnaire_test.rubrique1
    Par exemple dans le cas ou tu veux mettre le contenu de la rubrique 1 dans un champ de ta fenêtre.
    Par contre tu risque d'avoir un conflit car le nom de ta requête et identique au mon de ton fichier de données, utilise un autre nom pour la requête, comme dans mon exemple.

  10. #10
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2002
    Messages
    468
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 468
    Points : 809
    Points
    809
    Par défaut
    Après le HExécuteRequêteSQL, il faut pas faire un HLitpremier... puis après avoir lu les données, faire un HAnnuleDeclaration ?

    (et préciser dans la requêtes quelles sont les rubriques qu'on souhaite, ça peut être une bonne idée...)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    super
    mersi basam
    donc par rapport à ce que j'avais fait, il me manquait le *, et de lire ensuite le résultat de la requête ...

    et merci pour le premier paramètre de la requete SQL, je pensais qu'il fallait mettre le nom de la BDD HF

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par kuranes Voir le message
    puis après avoir lu les données, faire un HAnnuleDeclaration ?
    oui il me smeble avoir lu dans l'aide qu'il fallait régulièerement effacer les recherches pour ne pas saturer la mémoire

  13. #13
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2002
    Messages
    468
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 468
    Points : 809
    Points
    809
    Par défaut
    Citation Envoyé par lepirate Voir le message
    super
    mersi basam
    donc par rapport à ce que j'avais fait, il me manquait le *, et de lire ensuite le résultat de la requête ...

    et merci pour le premier paramètre de la requete SQL, je pensais qu'il fallait mettre le nom de la BDD HF
    Je te déconseille de mettre *, utilise plutôt les noms des rubriques que tu souhaites... Ce sera largement plus lisible...

    Tu y accèdera ensuite avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dictionnaire_test.NomRubrique

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    bon, c'est bon, j'ai réussi à trouver grace à vous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HExécuteRequêteSQL(Req_dictionnaire_test,"SELECT * FROM dictionnaire_test WHERE dictionnaire_test.Rubrique2="+Saisie_valeur)
    HLitPremier(Req_dictionnaire_test)
    Trace(Req_dictionnaire_test.Rubrique1+"/"+Req_dictionnaire_test.Rubrique2+"/"+Req_dictionnaire_test.Rubrique3)
    TANTQUE PAS HEnDehors
    	HLitSuivant(Req_dictionnaire_test)
    	Trace(Req_dictionnaire_test.Rubrique1+"/"+Req_dictionnaire_test.Rubrique2+"/"+Req_dictionnaire_test.Rubrique3)
    FIN
    donc si je comprends bien, tous les résultats de la requete SQL sont stockées en mémoire dans Req_dictionnaire_test
    et ensuite, j'affiche avec trace tous les résultats

    par contre, ce qui est bizarre, c'est que le dernier résultat de la requete est écrit 2 fois dans la trace :s
    qqn a une explication ?

  15. #15
    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
    Le HLitSuivant devrait être la dernière instruction de ta boucle afin d'éviter de dupliquer ta ligne de lecture et de prendre en compte le cas d'une requête vide.
    «Un problème bien défini est un problème à moitié résolu.»

  16. #16
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Oui le Hlitsuivant est mal placé. De plus je te déconseille l'utilisation de * dans ta requête, il vaut mieux mettre uniquement les champs dont tu as rééllement besoin.

    La requête présente un interet double :

    1 - Elle permet généralement une économie d'I/Os
    2 - Elle permet de réduire la quantité de données transitant sur le réseau.
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par klbsjpolp Voir le message
    Le HLitSuivant devrait être la dernière instruction de ta boucle afin d'éviter de dupliquer ta ligne de lecture et de prendre en compte le cas d'une requête vide.
    le hic, c'est que en mettant le Hlitsuivant apres la boucle, alors ca ne lit que le premier résultat de la requete, et en plus l'appli tourne en rond

    j'imagine qu'elle tourne en rond, car sans le HLitSuivant, ele ne progresse pas dans la liste des résultats ....
    je me trompe ?

  18. #18
    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
    Je n'ai pas dit d'enlever le HLitSuivant mais de le mettre à la fin de la boucle. Le HLitPremier positionne sur le premier enregistrement et le HLitSuivant avance jusqu'à la fin (HEnDehors = Vrai). Mais si tu n'as pas de résultat, tout de suite après le HLitPremier, HEnDehors retourne Vrai mais tu ne prends pas en compte cette éventualité. Ton code devrait donc ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SI HExécuteRequêteSQL(Req_dictionnaire_test,"SELECT * FROM dictionnaire_test WHERE dictionnaire_test.Rubrique2="+Saisie_valeur) _ET_ HLitPremier(Req_dictionnaire_test) ALORS
        TANTQUE PAS HEnDehors
            Trace(Req_dictionnaire_test.Rubrique1+"/"+Req_dictionnaire_test.Rubrique2+"/"+Req_dictionnaire_test.Rubrique3)
            HLitSuivant(Req_dictionnaire_test)
        FIN
    SINON
        Erreur(HErreurInfo)
    FIN
    «Un problème bien défini est un problème à moitié résolu.»

  19. #19
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Sinon, pour parcourir le résultat de ta requete, tu as une syntaxe toute faite pour ta boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SI PAS HExécuteRequêteSQL(Req_dictionnaire_test,"SELECT * FROM dictionnaire_test WHERE dictionnaire_test.Rubrique2="+Saisie_valeur)
        Erreur(ErreurInfo(errMessage))
        RETOUR
    FIN
     
    POUR TOUT Req_dictionnaire_test
      Trace(Req_dictionnaire_test.Rubrique1+"/"+Req_dictionnaire_test.Rubrique2+"/"+Req_dictionnaire_test.Rubrique3)
    FIN
    Avec ça, tu économises tes ptits doigts, ton clavier, et un poil ton cerveau

    Bon dev !

  20. #20
    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
    Je ne croyais pas que cette syntaxe existait sur WD10.
    «Un problème bien défini est un problème à moitié résolu.»

Discussions similaires

  1. comment exécuter une requete SQl
    Par bazzouz dans le forum JDBC
    Réponses: 4
    Dernier message: 05/09/2008, 16h13
  2. Réponses: 23
    Dernier message: 19/09/2006, 11h33
  3. [C#] Comment executer une requete sql y compris @@IDENTITY ?
    Par maitesn1 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 09/08/2006, 13h29
  4. Comment executer une requete sql delete dans une jsp ?
    Par DarkWark dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 24/05/2006, 16h59
  5. Réponses: 2
    Dernier message: 03/05/2004, 12h13

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