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 :

Requête paramétrée et modification ou création d'enregistrement


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Requête paramétrée et modification ou création d'enregistrement
    Bonjour,
    Je suis débutant, alors je vous demanderais de la patience et de l'indulgence ...
    Mon analyse comprend 2 fichiers :
    - Clients :
    Id_Client // Clé unique
    Nom_Client // Nom du client
    - Contacts :
    Id_Contact // Clé unique auto
    Client_Contact // Clé avec doublons
    Nom_Contact// Nom du contact

    Mon application a 2 fenêtres :
    - Fen_Clients : contient une table et des champs de saisie liés avec le fichier client. Je sais afficher tous les clients dans la table, créer un client, selectionner un client, et modifier un client (Hajout, Hmodifie ...)
    Ca fonctionne bien.
    - Fen_Contacts : cette fenêtre est appelée par Fen_Clients (lorsque 1 client est selectionné) et doit permettre de gérer (Création, Modification, Visualisation) le ou les contacts du client.
    Cette fenêtre a la même forme que Fen_Client, c'est à dire une Table pour afficher les contacts en mode tableau et des champs de saisie pour par exemple créer ou modifier un contact.
    Il ne faut selectionner que les les contacts correspondants au client : Client_Contact = Id_Client en cours ...
    Pour ce faire, j'utilise une requete indépendante avec un paramètre (le client).
    Lors de l'initialisation de la table, je renseigne le paramètre et ma table s'affiche correctement avec uniquement les contacts correspondant au client passé en paramètre. Ca ça fonctionne. Par contre, lorsque j'essaie de modifier un enregistrement (Hmodifie(REQ_Requete1)), la modification se fait, mais ma table affiche ensuite TOUS les enregistrements du fichier Contacts. Pour la création, je n'ai pas encore essayé ...
    Je me pose 2 questions (entre autres) :
    - Est-ce que ma technique est correcte (Requête indépendante avec paramètre) ? N'y a t il pas un autre moyen ?
    - Dans l'affirmative, que faut-il faire pour que ma source de données reste cohérente (QUE les enregistrements correspondants à la selection -- paramètre --, et non tout le fichier).

    Pour tous ceux qui ont compris mon problème, bravo et merci. Pour les autres, il me reste des dolipranes ...
    Encore merci à celles ou ceux qui sauront m'aider.
    Dominique

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    Ta table est elle mémoire ou fichier ?

    Je pense qu'elle est fichier et avec comme fichier une requête.

    Si ta table est remplie avec une requête XXX et que tu fais un Hmodifie de cette requête XXX tu ne modifiera que les données de ta requête et non ceux du fichier.

    je pense qu'à la modification d'une ligne de ta table. Tu fais une hlitrecherche dans la table contact de l'ID de contact puis tu hmodifie l'enregistrement.

    Ensuite tu relance ta requête initiale avec un tableaffiche (si ta table est bien sur lié au fichier requête XXX)

    Je ne suis plus sur de la syntaxe, je n'utilise plus de tables fichier pour des soucis de rapidité.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci d'avoir répondu.
    Oui, ma table est une table fichier liée sur une requête indépendante (crée dans le projet).
    Après plein d'essais, et un peu grace au hasard, j'ai trouvé la bonne formule (enfin j'espère) :

    Table
    - Initialisation :
    HexécuteRequête(REQ_Requête1, hModifieFichier, ParamVarClient)
    - Selection d'une ligne :
    FichierVersEcran(FEN_Fenêtre)

    Bouton Nouveau
    - Clic
    HRAZ(REQ_Requete1)
    FichierVersEcran(FEN_Fenêtre)

    Bouton Enregistrer
    - Clic
    SI REQ_Requête1..NouvelEnregistrement = Vrai ALORS
    HAjoute(REQ_Requête1, hAffecteParcours)
    SINON
    HModifie(REQ_Requête1)
    FIN
    TableAffiche(TABLE, taCourantPremier)
    FichierVersEcran(FEN_Fenêtre)

    Pour le moment ça fonctione impec ! Ce qui était dur, c'était de trouver les paramètres à affecter aux fonctions HAjoute et TableAffiche.

    Merci à toutes et tous

  4. #4
    Membre expert

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

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 355
    Points : 3 888
    Points
    3 888
    Par défaut
    Salut à toi,

    Au cas où la table serait liée à un fichier (et non pas une requête), tu as TableEnregistre(..) qui te permet de d'enregistrer les modifications faites dans la table et de les répercuter dans le fichier directement.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    Je pense comme je te l'ai dit la première fois que ton code modifie la requête mais pas le fichier.

  6. #6
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Si, si, la modification sur la requête et propagée dans le fichier puisqu'il indique :
    dans le HExecuteRequete

    Bob.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    Oui je n'avais pas vu ce paramètre que je n'utilise jamais .
    C'est toujours bon à savoir

  8. #8
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Le truc bon a savoir, c'est que quand tu attaques une BDD autre qu'hyperfile, genre mysql, sqlserver, oracle, etc ... ce paramètre est implicite. Une modification dans ma requête sera toujours propagée dans la base

    Allez chercher la cohérance dans tout ça :/

    Bob.

  9. #9
    Membre expert

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

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 355
    Points : 3 888
    Points
    3 888
    Par défaut
    La cohérence y ait puisqu'au final avec une base HF, l'option permet par sa présence de modifier également le fichier, par son absence de ne modifier que le résultat de la requête, ce qui n'est pas possible avec les autres bases.

    De mon point de vue, cela représente une possibilité de plus, de pouvoir triturer des données sur des requêtes, sans pour autant vouloir enregistrer ces modifications

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    Sous cette syntaxe si je modifie ensuite ma requête, vous me dites que je modifie le fichier de base XXX ?

    l_REQClause est une chaine = "SELECT * FROM XXX"
    l_REQ est une source de données

    HexecuteRequeteSQL(l_REQ,HrequeteDefault,l_REQClause)

  11. #11
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    @madsland

    Ca dépends de la base de données que tu utilises. Si c'est de l'hyperfile, alors non ca ne modifie pas. Pour modifier il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    l_REQClause est une chaine = "SELECT * FROM XXX"
    l_REQ est une source de données
     
    HexecuteRequeteSQL(l_REQ,hModifieFichier,l_REQClause)

  12. #12
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    @Lo²

    Je n'interprète pas la cohérence comme toi. Pour moi, le comportement devrait être identique sans le flag pour tout le monde, donc modifier les tables de la BD sans le flag.
    Il faudrait donc un flag hNeModifiePasFichier pour être cohérent.

    A l'heure actuelle, le portage d'une applie de HF vers une un autre SGBDR peut réserver de bien mauvaide suprise !

    Bob.

  13. #13
    Membre expert

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

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 355
    Points : 3 888
    Points
    3 888
    Par défaut
    Je suis d'accord avec toi pour le portage et c'est pour cela que la plupart du temps j'utilise les fonctions SQL, il y a moins de surprise.

    Edit : Je me suis planté dans l'utilisation de "cohérence" ^^
    Donc, en effet, ce n'est pas cohérent, mais en fait j'y vois un petit plus pour ceux qui utilisent HF.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    @Grmmml : Moi j'utilise surtout SQLserver, mais je pensais vraiment que je travaillais sur la source de données créee l_REQ et qu'elle était complètement indépendante du fichier.
    Es tu sur et certain de ça ?

    Je n'ai jamais eu besoin de modifier une requête, ce n'est pas ma manière de coder mais je suis très étonné, je ferais le test

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/04/2013, 20h57
  2. [Vxi3] Création requête paramétrée
    Par GuineaPig74 dans le forum Deski
    Réponses: 7
    Dernier message: 04/06/2010, 15h55
  3. [AC-2003] VBA + (Requêtes paramétrés OU Modification du SQL de la requête) ?
    Par buzz73 dans le forum VBA Access
    Réponses: 11
    Dernier message: 27/08/2009, 16h43
  4. création d'une requête paramétré
    Par Anick Durocher dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/12/2008, 20h55
  5. paramétrer les modifications des champs d'une requête
    Par Gary_Stoupy dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 24/01/2007, 15h19

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