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

4D Discussion :

Passage d'une sous-sous-table a une table liée


Sujet :

4D

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut Passage d'une sous-sous-table a une table liée
    Bonjour,
    je dois transcrire une base contenant des sous-sous-tables en une base n'en contenant plus (car la v2004 ne les prend plus en compte).

    Ma sous-sous-table est la table [ALLOC]ENFANT'PREST ENFT
    La nouvelle table liée que jai créée est la table PREST ENFT. Cette table est lié avec la sous-table [ALLOC]ENFANT (PREST ENFT est la table N, [ALLOC]ENFANT est la table 1) et d'autres tables indépendantes.

    Jai donc une partie de code qui est celle-ci (sur l'ancienne base):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tant que (non(Fin sous enregistrement([ALLOC]ENFANTS'PREST ENFT)))
        .....
        SOUS ENREGISTREMENT SUIVANT([ALLOC]ENFANTS'PREST ENFT)
    fin tant que

    Je l'ai remplacé par celui-ci qui ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TOUT SELECTIONNER([PREST_ENFT])
    DEBUT SELECTION
    Tant que (Non(Fin de selection([PREST_ENFT])))
        ....
        ENREGISTREMENT SUIVANT([PREST_ENFT])
    Fin tant que

    jaimerai savoir quel code il faudrait que je mette pour pouvoir faire une selection identique a celle sur l'ancienne base.

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    je pense que je vais modifiée ma question,

    comment est ce que vous feriez pour parcourir un ensemble d'enregistrements contenus dans une table et faire une selection sur ceux qui vous interesse?

    Merci d'avance

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    Que voulez vous faire exactement ?

    Voulez vous imprimer ces enregistrements ? les afficher ?

  4. #4
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 63
    Points : 62
    Points
    62
    Par défaut
    Pour les sélectionner vous pouvez les adjoindre dans un ensmemble.
    Ensemble vide([matable];"$EnsAGarder")

    tout selectionner([matable])
    tant que (non(fin de selection([matable])))
    si (condition de selection validé)
    adjoindre element([matable];"$EnsAGarder")
    fin de si


    liberer enregistrement([matable])
    enregistrement suivant([matable])
    fin tant que

    `La vous pouvez maintenant utiliser l'ensemble(EnsAGarder)
    et faire des traitements particuliers en bouclant sur tous les enregistrements de l'ensemble

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par CGareau
    Bonjour,

    Que voulez vous faire exactement ?

    Voulez vous imprimer ces enregistrements ? les afficher ?
    Jaimerai faire un traitement sur ces enregistrement, pas d'affichage ni d'impression.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    Plus precisement, voici le code de traitement a l'interieur du tant que:

    Ancienne base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tant que (non(Fin sous enregistrement([ALLOC]ENFANTS'PREST ENFT)))
        VTJ:=VTJ+[PREST_ENFT]Nb Jour Part CE
        SOUS ENREGISTREMENT SUIVANT([ALLOC]ENFANTS'PREST ENFT)
    fin tant que


    Nouvelle base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TOUT SELECTIONNER([PREST_ENFT])
    DEBUT SELECTION
    Tant que (Non(Fin de selection([PREST_ENFT])))
        VTJ:=VTJ+[PREST_ENFT]Nb Jour Part CE
        ENREGISTREMENT SUIVANT([PREST_ENFT])
    Fin tant que

    Il s'agit juste d'un traitement que je fais sur un champ. Pour cela je dois parcourir tous les enregistrements de la table.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    Vous avez oublié de préciser le nom de la table avec la commande DEBUT SELECTION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUT SELECTION([PREST_ENFT])

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    En fait le probleme est celui ci:

    qd je suis dans le formulaire de saisie, dès que je rentre un champ et que je valide, il y a un traitement et puis tous les autres champs se mettent a 0.

    En isolant le probleme, jai pu determiner d'ou il venait, et il vient de ce bout de code et plus precisement du "TOUT SELECTIONNER" qui met en memoire le premier enregistrement et fait le traitement sur tous les autres enregistrements.
    Mais a la fin du traitement, il garde les valeurs du dernier enregistrement et les inscrit dans les champs du formulaire de saisie.
    donc ici en l'occurence, le dernier enregistrement possede ts les champs a 0.

    Jaimerai bien faire le traitement sans que les valeurs que jai inscrites dans les champs soit modifiées.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    OK.
    En effet lorsque vous faites votre traitement, vous perdez votre sélection courante.
    Avez vous besoin de ce traitement lors de la saisie de vos champs ?
    Pourquoi ne faites vous pas votre traitement au moment où vous validez le formulaire, après que votre enregistrement soit sauvegardé ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    oui jai besoin de faire ce traitement pendnat la saisie (malheureusement ) il doit etre fait de maniere dynamique au cas ou il y ait une condition qui ne soit pas respecté.

    jai essayer, de maniere très "moche" du point de vue programmation, de sauvegarder les champs dans des variables locales, faire le traitement, et ensuite restituer les variables aux champs en questions. Le probleme c'est que ca ne marche tjs pas.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    $code:=[PREST_ENFT]Code
    $discipline:=[PREST_ENFT]Discipline
    $nbjours:=[PREST_ENFT]Nbre de jours
    $nbjourspartCE:=[PREST_ENFT]Nb Jour Part CE
    $depengagee:=[PREST_ENFT]Dép Engagée
    $date:=[PREST_ENFT]Date
    $montantprest:=[PREST_ENFT]Montant Prest
    $libelle:=[PREST_ENFT]Libellé
    $arrhe:=[PREST_ENFT]Arrhes
    $reglement:=[PREST_ENFT]Réglt à effect
    $numpiece:=[PREST_ENFT]Pièce
    $ordrede:=[PREST_ENFT]A l ordre de
     
    CHERCHER([PREST_ENFT];[PREST_ENFT]Code="30";*)
    CHERCHER([PREST_ENFT];*&*;[PREST_ENFT]Marqueur#1)
    VTJ:=0
     
     
    TOUT SELECTIONNER([PREST_ENFT])
    DEBUT SELECTION([PREST_ENFT])
    Tant que (Non(Fin de selection([PREST_ENFT])))
    	VTJ:=VTJ+[PREST_ENFT]Nb Jour Part CE
    	ENREGISTREMENT SUIVANT([PREST_ENFT])
    Fin tant que 
    TABLE PAR DEFAUT([PREST_ENFT])
     
    [PREST_ENFT]Code:=$code
    [PREST_ENFT]Discipline:=$discipline
    [PREST_ENFT]Nbre de jours:=$nbjours
    [PREST_ENFT]Nb Jour Part CE:=$nbjourspartCE
    [PREST_ENFT]Dép Engagée:=$depengagee
    [PREST_ENFT]Date:=$date
    [PREST_ENFT]Montant Prest:=$montantprest
    [PREST_ENFT]Libellé:=$libelle
    [PREST_ENFT]Arrhes:=$arrhe
    [PREST_ENFT]Réglt à effect:=$reglement
    [PREST_ENFT]Pièce:=$numpiece
    [PREST_ENFT]A l ordre de:=$ordrede

    Qu'en pense tu?

    Sinon je vais essayer de faire le traitement lors de la validation du formulaire.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    La commande TABLE PAR DEFAUT([PREST ENFT]) ne sert a rien. Jai oublié de l'enlever.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Pourquoi faites vous un CHERCHER si après vous faites un TOUT SELECTIONNER ?

    Dans votre traitement vous incrémentez une variable et non un champ. Je vous conseil donc d'éxécuter votre script à la fin de votre formulaire.


    Si vous persistez dans votre choix je vous conseil de remplacer vos champs par des variables et votre script par celui-ci :


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    VTJ:=0
     
     
    TOUT SELECTIONNER([PREST_ENFT])
    DEBUT SELECTION([PREST_ENFT])
    Tant que (Non(Fin de selection([PREST_ENFT])))
    	VTJ:=VTJ+$nbjourspartCE
    	ENREGISTREMENT SUIVANT([PREST_ENFT])
    Fin tant que 
     
    CREER ENREGISTREMENT([PREST_ENFT])
     
    [PREST_ENFT]Code:=$code
    [PREST_ENFT]Discipline:=$discipline
    [PREST_ENFT]Nbre de jours:=$nbjours
    [PREST_ENFT]Nb Jour Part CE:=$nbjourspartCE
    [PREST_ENFT]Dép Engagée:=$depengagee
    [PREST_ENFT]Date:=$date
    [PREST_ENFT]Montant Prest:=$montantprest
    [PREST_ENFT]Libellé:=$libelle
    [PREST_ENFT]Arrhes:=$arrhe
    [PREST_ENFT]Réglt à effect:=$reglement
    [PREST_ENFT]Pièce:=$numpiece
    [PREST_ENFT]A l ordre de:=$ordrede
     
    STOCKER ENREGISTREMENT([PREST_ENFT])
    Cordialement

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    Le code ne vient pas de moi, je ne le connait donc pas tres bien. C'est vrai que le TOUT SELECTIONNER apres le CHERCHER ne sert a rien.

    Le code que j'ai afficher n'est qu'un problème que je rencontre et que j'essaie de régler.

    Le gros du probleme, c'est arriver a trouver le code qui remplacerai le traitement fait en v6.5 qui est celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tant que (non(Fin sous enregistrement([ALLOC]ENFANTS'PREST ENFT)))
        VTJ:=VTJ+[PREST_ENFT]Nb Jour Part CE
        SOUS ENREGISTREMENT SUIVANT([ALLOC]ENFANTS'PREST ENFT)
    fin tant que

    j'essaie de trouver le code qui remplacerai le tant que fait sur la sous-sous-table.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Vous pouvez remplacer votre traitement par celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Tant que (Non(Fin de selection([PREST_ENFT])))
    	VTJ:=VTJ+$nbjourspartCE
    	ENREGISTREMENT SUIVANT([PREST_ENFT])
    Fin tant que
    Cordialement

  15. #15
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    Javais deja essayé ce code mais en fait, qd je saisie des informations sur un formulaire, le traitement que je fais a la fin se fait sur tous les enregistrements et donc supprime la selection courante c-a-d les valeurs que javais saisies. Et je n'arrive pas a retrouver ces valeurs sauf si je les sauvegarde auparavent dans des variables locales et que je les restituent a la fin du traitement.

    C'est pour cela que je voulais savoir sil existe un code generique qui me permettait de faire cela, ou sinon une maniere de sauvegarder l'enregistrement courant.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Je vous renvoie alors vers le code de mon précedent message !

    La manière la plus simple étant de remplacer vos champs par des variables. Ainsi les valeurs ne seront enregistrées dans la table qu'au moment de la validation et vous pourrez effectuer tous les traitements pendant la saisie sans aucun problème.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    Merci bcp pour votre reponse, ca marche mieux maintenant

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

Discussions similaires

  1. [AC-2007] Exporter des données d'une table vers une autre sous condition
    Par Imitator92 dans le forum IHM
    Réponses: 3
    Dernier message: 11/09/2009, 16h34
  2. comment compiler une classe sous linux qui implemente une interface
    Par nina08 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 19/11/2008, 09h43
  3. activation d'une macro après sasie d'une valeur sous excel
    Par pecofrou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/12/2007, 22h52
  4. Réponses: 7
    Dernier message: 30/05/2007, 15h15
  5. Faire apparaitre une fênetre sous l'appuie d'une touche
    Par EssaiEncore dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2005, 17h21

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