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 :

EcranVersFichier + Requete + HModifie [WD17]


Sujet :

WinDev

  1. #1
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut EcranVersFichier + Requete + HModifie
    Bonjour,

    j'ai un soucis, certainement basique pour certains, concernant l'enregistrement de données issus de requete, je m'explique :

    - J'ai une fenêtre contenant plusieurs zones remplies par une requête (qui implique 4 fichiers reliés)
    - J'ai donc lié, via l'iHM, chaque champs à sa rubrique repective poyur effectuer un FichierVersEcran qui fonctionne tres bien.

    Probleme :
    Comment, en cliquant sur Enregistrer, je peux mpettre à jour les données étant données qu'elles previennent d'une requete qui implique 4 fichiers?

    J'ai tenté ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HLitRecherchePremier(MaRequete,MonFichier.IDMonFichier,nIDMonFichier)
    EcranVersFichier()
    SI HModifie(MaRequete) = Faux ALORS
    	Erreur("Impossible d'effectuer les modifications  dans la base de données")
    FIN
    RAZ()
    HRAZ()
    mais il me dit que ma requete n'est pas initialisée...enfin il ne veut rien savoir

    Merci par avance de vos lumières
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  2. #2
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Bonjour,
    As-tu défini à quel moment exactement il te dit que ta requête n'est pas initialisée ?
    As-tu fais un hexecute requete ?

    Bon dev
    Gancau

  3. #3
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    gancau,
    pour repondre à tes questions :
    - au moment ou je clique sur le bouton "Enregistrer" qui contient ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HLitRecherchePremier(MaRequete,MaRubrique,nIdMaRubrique)
    EcranVersFichier()
    SI HModifie(MaRequete) = Faux ALORS
    	Erreur("Impossible d'effectuer les modifications  dans la base de données")
    FIN
    RAZ()
    HRAZ()
    Il me met ce message d'erreur :
    Erreur à la ligne 88 du traitement Clic sur BTN_Enregistrer.
    Vous avez appelé la fonction HLitRecherchePremier.
    La source de données <MaRequete> n'est pas initialisée.
    - S'il s'agit d'un fichier de données, le fichier n'a pas été trouvé dans l'analyse <C:\Mes Projets\...wdd> ou n'a pas été décrit avec les fonctions HDéclare / HDéclareExterne.
    - S'il s'agit d'une requête ou d'une vue, l'exécution a peut-être échoué.
    Pour récupérer l'erreur correspondante, testez le résultat des fonctions HExécuteRequête / HExécuteRequêteSQL / HCréeVue.

    ----- Informations techniques -----

    Projet : XXX

    Appel WL :
    Traitement de 'Clic sur BTN_Enregistrer' (FEN_FICHE_DBF.ONG_DBF.BTN_Enregistrer), ligne 88, thread 0
    Fonction 'HLitRecherchePremier', syntaxe 0

    Que s'est-il passé ?
    La source de données <MaRequete> n'est pas initialisée.
    - S'il s'agit d'un fichier de données, le fichier n'a pas été trouvé dans l'analyse <C:\Mes Projets\....wdd> ou n'a pas été décrit avec les fonctions HDéclare / HDéclareExterne.
    - S'il s'agit d'une requête ou d'une vue, l'exécution a peut-être échoué.
    Pour récupérer l'erreur correspondante, testez le résultat des fonctions HExécuteRequête / HExécuteRequêteSQL / HCréeVue.

    Code erreur : 70018
    Niveau : erreur fatale (EL_FATAL)
    Code erreur WD55 : 18

    Assistance

    - Vérifiez que le fichier est bien décrit dans l'analyse en cours
    - S'il s'agit d'un fichier décrit en dynamique, vérifiez que ce
    fichier a bien été déclaré avant par HDéclare, HDéclareExterne
    ou HDécritFichier
    - S'il s'agit d'une requête du projet ou d'une requête SQL, vérifiez
    que cette requête a été déclarée avant par HExécuteRequête pour une
    requête du projet ou par HExécuteRequêteSQL pour une requête SQL.
    Je ne fais pas d'exeture requete, Pourquoi d'ailleurs?
    Le seul moment ou je fais Hexecute requete est dans mon code d'initialisation de la fenetre avant l'affichage et a la fin de cette initialisation, je libere avec un HAnnuleDéclaration(MaRequete)

    Une idée ?
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    comment déclares-tu "Marequete" ?

    MaRequête est donné dans l'exemple de Windev, mais cela est censé être le nom d'une requête que tu as déjà créée. tu dois la trouver dans tes requêtes.

    Est-ce le cas ?

    Gancau

  5. #5
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Tu as 4 fichiers, je pense que tu devrais faire qqchose dans le style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HRAZ(Fichier1)
    HRAZ(Fichier2)
    HRAZ(Fichier3)
    HRAZ(Fichier4)
    EcranVersFichier()
    Hmodifie(Fichier1)
    Hmodifie(Fichier2)
    Hmodifie(Fichier3)
    Hmodifie(Fichier4)
    Ce qui t'éviterait de passer par la requête. A tester...

    Sinon, tu devrait faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    hexecuterequete(marequete,hrequetedefaut,param1)
    hlitpremier(marequete)
    champ1 = marequete.valeur1
    ...
    dans le code d'init de ta fenêtre.
    Pour le code d'enregistrement, tu mets juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI HModifie(MaRequete) = Faux ALORS
      Erreur("Impossible d'effectuer les modifications  dans la base de données")
    FIN
    RAZ()
    HRAZ()
    A tester également...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  6. #6
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    gancau,
    - Concernant la declaration de ma requete :
    ¤ j'ai crée une requete externe qui implique 4 fichiers avec des jointures fermées et certaines ouvertes. C'est une requete qui prend en parametre un "IDFiche"
    ¤ Dans le code d'INITIALISATION de ma fenetre, j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SI HExécuteRequête(REQ_MesDonnees,hRequêteDéfaut,nIdFiche) = Faux ALORS
    	Erreur("Impossible d'afficher les infos de la fiche. ", ErreurInfo())
    	RENVOYER Faux
    SINON
    	// Lecture du premier enregistrement de la requête
    	HLitPremier(REQ_MesDonnees)
    	gnIdFiche = REQ_MesDonnees.IDFICHE
     
    	//Permet d'afficher les valeurs au niveau de l'ecran
    	FichierVersEcran()
     
     
    	HAnnuleDéclaration(REQ_DBF_1_InfosGene)
    FIN
    frenchsting,
    je passe par une requête pour remplir mon écran car j'ai beaucoup de données à aller chercher dans ces 4 fichiers.

    Mon souci est vraiment sur le code du "Enregistrer". Comment lui dire d'enregistrer les modifications étant données que je passe par une requête pour remplir les zones et que ces zones, au niveau de la fenêtre, sont liées aux rubriques de ma requête?

    Et pourquoi ne pas mettre de EcranVersFichier() dans le code que tu proposes?
    Code :
    SI HModifie(MaRequete) = Faux ALORS
    Erreur("Impossible d'effectuer les modifications dans la base de données")
    FIN
    RAZ()
    HRAZ()
    Autre question :
    Comme ma requête demande en paramètre un "IDFICHE", est ce que je peux effectivement faire un HModifie(MaRequete) comme ça? sans mentionner sur quelle fiche je suis?

    H.E.L.P!!!

    Autant a partir de fichiers je n'ai aucun soucis et l'aide est bien expliquée...Autant à partir d'une requete impliquant plusieurs fichiers derriere c'est le flou complet et l'aide PC SOFT n'est vraiment pas terrible

    Merci de vos lumières
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  7. #7
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    C'est clair que l'aide par rapport aux requêtes n'est pas claire.

    Une solution : si tu as ta requête qui fonctionne bien, tu peux faire qqchose du style :
    Tu lies tes champs à tes fichiers (au lieu de les lier à ta requête), puis tu fais :
    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
    SI HExécuteRequête(REQ_MesDonnees,hRequêteDéfaut,nIdFiche) = Faux ALORS
    	Erreur("Impossible d'afficher les infos de la fiche. ", ErreurInfo())
    	RENVOYER Faux
    SINON
    	// Lecture du premier enregistrement de la requête
    	HLitPremier(REQ_MesDonnees)
    	gnIdFiche = REQ_MesDonnees.IDFICHE
    	HLitRecherchePremier(Fichier1,id,gnidfiche)
    	HLitRecherchePremier(Fichier2,id,gnidfiche)
    	HLitRecherchePremier(Fichier3,id,gnidfiche)
    	HLitRecherchePremier(Fichier4,id,gnidfiche)
     
    	//Permet d'afficher les valeurs au niveau de l'ecran
    	FichierVersEcran()
     
    	HAnnuleDéclaration(REQ_DBF_1_InfosGene)
    FIN
    Dans le code de validation de ta fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    HLitRecherchePremier(MaRequete,MaRubrique,nIdMaRubrique)
    EcranVersFichier()
    SI HModifie(Fichier1) = Faux ALORS
    	Erreur("Impossible d'effectuer les modifications  dans la base de données 1")
    ...
    SI HModifie(Fichier4) = Faux ALORS
    	Erreur("Impossible d'effectuer les modifications  dans la base de données 4")
    FIN
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  8. #8
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    frenchsting,
    c'est rassurant d'avoir le même point de vue

    Je vais faire la solution que tu me proposes et je te tiens au courant
    Merci de ton aide

    J'espère tout de même que j'aurai la réponse UN JOUR de savoir si c'est en fait possible ou pas de faire HModifie à partir de données chargées via une requête...le mystère reste entier!
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  9. #9
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    Coucou à tous!!

    Et bien voilà, je n'aurai pas besoin d'attendre longtemps LE JOUR car j'ai trouvé la solution grâce au post suivant http://www.developpez.net/forums/d52...-lies-requete/

    Donc pour vous éviter de perdre du temps (ou d'investir inutilement, tout dépend de quel côté on se positionne!!), voici la solution qui fonctionne!!!

    1/ Dans le code d'initialisation de ma fenêtre, j’exécute la requête (qui impliquent donc 4 fichiers, avec des jointures...) de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SI HExécuteRequête(REQ_MA_REQUETE,hModifieFichier,nIdFiche) = Faux ALORS
    	Erreur("Impossible d'afficher les données. ", ErreurInfo())
    	RENVOYER Faux
    SINON
    HLitPremier(REQ_MA_REQUETE)
    	
    	//Permet d'afficher les valeurs au niveau de l'ecran
    	FichierVersEcran()
    //HAnnuleDéclaration(REQ_MA_REQUETE)
    le HModifieFichier est INDISPENSABLE si vous souhaiter après modifier les données issues de la requête!
    Et surtout ne pas mettre de HAnnuleDéclaration(REQ_MA_REQUETE) !!

    2/ Puis dans le code du bouton "Enregistrer", le HModifie marche tout de suite mieux !! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HLitRecherchePremier(REQ_MA_REQUETE,MARUBRIQUE.IDMARUBRIQUE,nIdFICHE)
    SI HTrouve(REQ_MA_REQUETE)=Vrai ALORS
    	EcranVersFichier()
    	SI HModifie(REQ_MA_REQUETE) = Faux ALORS
    		Erreur("Impossible d'effectuer les modifications  dans la base de données")
    		Erreur(ErreurInfo(errComplet))
    	FIN
    SINON
    	Erreur("Impossible d'effectuer les modifications  dans la base de données")
    FIN
    En espérant que ça vous aidera
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Super. Merci pour ce retour.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

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

Discussions similaires

  1. [windev11]ecranversfichier,Hmodifie et requete
    Par nath-0-0 dans le forum WinDev
    Réponses: 2
    Dernier message: 02/02/2008, 19h29
  2. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  3. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  4. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

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