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 :

Modification sur table mémoire


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Juin 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 36
    Par défaut Modification sur table mémoire
    Bonjour,

    J’ai un petit problème à vous soumettre, j’ai créé une table mémoire, celle-ci est liée à une base de données que j’ai appelé « Sais », qui est composée d’un N° Journal(combo), d’un N° de pièce, d’une date, d’un libellé, d’un n° Compte, d’un débit et d’un credit.
    Le fichier est indexé sur une clé composé ( N°journal+N° pièce)

    Lorsque je crée une nouvelle ligne dans ma table mémoire et que je valide, la ligne est bien enregistrée. Par contre si je rentre en saisie dans les lignes, je peux modifier leur contenu, mais dès que je valide et je quitte le programme-et retourne sous wdmap visionneur de données , je constate qu’il n’y a eu aucune modification. Vous trouverez ci-dessous le code de modification que j’ai utilisé

    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
    POUR TOUTE LIGNE DE TABLE_SAIS
    HLitRecherche(SAIS,JALPIECE1,[COMBO_ANNEXJX.COL_CODJAL,SAI_PIECE]) // Jalpièce1 est l’index composé , combo_annexjx est le n° journal, sais_piece est le n° pièce
     
          SI HTrouve()     
     
    	SAIS.MOISAN=SAI_MOISAN
    	SAIS.LIBOP=SAI_LIBOP
     
            SAIS.COMPTE=TABLE_SAIS.COL_COMPTE
            SAIS.DB=TABLE_SAIS.COL_DB
            SAIS.CR=TABLE_SAIS.COL_CR
     
            HModifie(SAIS)
     
          FIN
    FIN
    Il y’a un truc que je n’ai pas compris ???

    Merci de votre aide

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 122
    Par défaut Clé Composé
    Bonjour,

    As-tu essayer en mettant la virgule entre guillemets :[COMBO_ANNEXJX.COL_CODJAL+","+SAI_PIECE]?
    Les crochets je ne pense pas.
    Sinon il y a la fonction HConstruitValClé qui est faites pour ça, mais bon j'ai jamais tester.

    N_Ron

  3. #3
    Membre Expert 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
    Par défaut
    Ta syntaxe pour créer ta clé composée est bonne. En passant, N_Ron, ce n'est pas une virgule qui sépare les champs dans une clé composée, c'est plus compliqué que ça.

    Je crois que le mot clé ici c'est, "table mémoire". Tu devrais relire la documentation à ce sujet. Une table mémoire, signifie que le contenu du fichier est chargé en mémoire puis lié à la table. Elle n'est donc pas lié au fichier. Si tu veux que tes modifications soient pris en compte dans ton fichier, tu dois utiliser une table fichier, utiliser une vue ou faire les modification manuellement.

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Par défaut
    Si c'est le seul code de mise à jour que tu as dans ta table, alors tu as un fonctionnement un peu bizarre.
    Tu as fait une table "fichier chargé en mémoire", tu as relié toutes les colonnes de la table à ton fichier, et tu effectue les mises à jour par le code.

    L'ajout par contre, est bien géré par les fonctions natives de la fenêtre.

    La confusion est entre Table "mémoire", et Table "fichier chargé en mémoire". La première n'étant reliéee à aucun fichier, et nécessitant donc un traitement entièrement manuel.

    En version 14, la table mémoire est cochée "Par programation" dans l'onglet contenu de ses propriétés. La table fichier chargé en mémoire est cochée "fichier" puis, en dessous, "chargé en mémoire". Ces termes n'étaient pas les mêmes dans la version précédente.

    Si c'est bien une table "fichier chargé en mémoire" que tu as de coché, alors la méthode à appliquer est simple : dans l'évenement "sortie de ligne", il faut utiliser la fonction TableEnregistre. (je te laisse voir l'aide)

    Si c'est une table remplie par programmation, alors voici comment tester tes problèmes d'enregistrement correctement.
    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
     
    POUR TOUTE LIGNE DE TABLE_SAIS
          SI PAS HLitRecherche(SAIS,JALPIECE1,[COMBO_ANNEXJX.COL_CODJAL,SAI_PIECE]) ALORS
                Erreur("Ligne introuvable" + RC + HErreurinfo())
          SINON
                SAIS.MOISAN=SAI_MOISAN
                SAIS.LIBOP=SAI_LIBOP
                SAIS.COMPTE=TABLE_SAIS.COL_COMPTE
                SAIS.DB=TABLE_SAIS.COL_DB
                SAIS.CR=TABLE_SAIS.COL_CR
     
                SI PAS HModifie(SAIS) ALORS 
                      Erreur("Mise à jour impossible" + RC + HErreurinfo())
                FIN
          FIN
    FIN
    Par contre, ce code met à jour toute la table d'un seul coup, même si tu n'as rien fait dessus.
    Je te conseillerais donc de mettre à jour chaque ligne à chaque fois que tu la quitte.
    Le code est strictement le même, la boucle en moins. Il faut par contre le placer dans l'évenement "sortie de ligne".

  5. #5
    Membre actif
    Inscrit en
    Juin 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 36
    Par défaut MODIFICATION SUR TABLE MEMOIRE
    IL s'agit d'une table remplie par programmation.
    j'ai testé suivant le code que tu m'as envoyé. Aucune erreur renvoyée
    j'ai constaté une chose, c'est que lorsque je voulais modifier la valeur d'un deuxième ou troisième élément(2eme ligne,3eme ligne) déjà saisi , il me modifie le premier élément, c'est à dire la première ligne. Donc le problème je crois vient des lignes, étant donné que le fichier est indexé uniquement sur le
    N° Journal+N° Pièce. y'a t'il un moyen d'ajouter le N° de Ligne dans hlitrecherchepremier(), sans passer par une autre création d'index.

    merci de votre réponse

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Par défaut
    Je ne connais pas ta structure, mais effectivement ton problème vient certainement de là.
    Les enregistrements doivent être identifiés par une clé unique. Je vois trois solutions à ce que tu demandes.
    1. Soit tu créés une nouvelle clé composée de tes trois champs. C'est la solution la plus sûre si ce trio doit être unique car il suffira de la placer en "Clé unique" pour être sur de ne jamais avoir de doublons
    2. Soit tu créés un IDAuto. Ensuite tu charges cet identifiant dans la table, en colonne cachée, et tu fais la recherche grace à lui.
    3. Soit tu charges, toujours en colonne cachée, le numéro de l'enregistrement (HNumEnr). Ensuite tu y accèdes par HLit(COL_Numéro). C'est la solution la moins propre, mais elle fonctionne (tant qu'il n'y a pas de ré-indexation entre la lecture et l'écriture).

    Ma solution préférée est la seconde. Le premier champ de tous mes fichiers est MaTable_ID, et c'est un ID Auto. La solution la moins standard est la troisième. Je ne l'ai vu dans aucun manuel.

Discussions similaires

  1. [WD14] Auto-incrémentation sur table mémoire
    Par BENKOUIDER dans le forum WinDev
    Réponses: 1
    Dernier message: 02/08/2009, 13h17
  2. [WD12E] État sur Table Mémoire
    Par no_me_entero dans le forum WinDev
    Réponses: 1
    Dernier message: 01/06/2009, 22h08
  3. [WD12] Modification sur table liée
    Par Ninou's DEV dans le forum WinDev
    Réponses: 5
    Dernier message: 19/12/2008, 11h03
  4. Réponses: 11
    Dernier message: 27/06/2006, 16h42

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