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

Cobol Discussion :

[AS400] Vérifier existance d'un enregistrement


Sujet :

Cobol

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut [AS400] Vérifier existance d'un enregistrement
    Bonjour,
    Voici un fichier indexé : MARQUE
    Nom d'enregistrement: MARQUER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Enregistrements: ACROMAR PIC X(5)
                           NOMMAR PIC X(25)
    ACROMAR est l'identifiant unique.

    Je voudrais vérifier si dans ce fichier il y a bien une marque donnée (disons RENAULT , ACROMAR = RENAU pour l'exemple).

    Voici les parties de mon code:
    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
    ...
    FILE CONTROL. 
    SELECT MARQ ASSIGN TO DATABASE-MARQUE
                   ORGANIZATION IS INDEXED
                   ACCESS MODE IS DYNAMIC
                   RECORD KEY EXTERNALLY-DESCRIBED-KEY.
    ...
               
    PROCEDURE DIVISION. 
               OPEN INPUT MARQ.
               ...
               MOVE "RENAU" TO ACROMAR OF MARQUER
               MOVE SPACES TO NOMMAR OF MARQUER
               START MARQ KEY NOT LESS EXTERNALLY-DESCRIBED-KEY
                    INVALID KEY DISPLAY "Cette marque n'existe pas"
                    NOT INVALID DISPLAY "Cette marque existe"
               END-START.
               ...
    Disons que RENAU n'existe pas dans mon fichier MARQUE.
    Je voudrais que "Cette marque n'existe pas" s'affiche, mais ce n'est pas le cas... Pouvez-vous m'aider?

    Merci d'avance!

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Puisque ACROMAR est l'identifiant unique, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              MOVE "RENAU" TO ACROMAR OF MARQUER.
              READ MARQ INVALID KEY DISPLAY "Cette marque n'existe pas"
                      NOT INVALID DISPLAY "Cette marque existe".

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut
    Merci!
    J'ai encore un petit problème avec ce programme:

    En fait l'ACROMAR que je recois provient d'un displayfile.
    Pour la vérification de cet ACROMAR tout fonctionne bien!

    Mais sur ce display file j'ai également d'autres champs :

    - PRIXMOYEN (entier en étendu avec deux chiffres après la virgule)
    - NOMCOMPLET PIC X(20) le nom complet de la marque

    J'aimerais dans le programme qui vérifie si ACROMAR existe également vérifier si aucun des deux autres champs n'a pas été complété dans le displayfile. Ces champs sont "rappatriés" dans mon programme avec un MOVE CORR.
    Tout ça se passe bien mais j'aimerais donc vérifier (après avoir fait le move corr) si les champs entrés n'étaient pas vide.

    Pourriez-vous m'aider?

    Merci encore!

  4. #4
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Je n'ai pas très bien compris à quel moment tu veux vérifier si les autres champs ont été modifiés '"complétés").

    Le MOVE CORR n'est qu'une succession de 0 ou plusieurs MOVE juste pour gagner sur l'écriture du source et sur les zones ayant les mêmes noms dans des groupes de zones différents, ce n'est pas une opération d'entrée/sortie, donc je ne comprends pas de quel MOVE il s'agit : du format du fichier écran (display file format) au format du fichier disque ou à un groupe de sauvegarde de la working.

    En général :
    - on saisit d'abord la clé (identifiant unique) du fichier à partir d'un format écran affiché au préalable,
    - on vérifie l'existence de cette clé dans le fichier disque,
    - et en fonction de ce qu'on cherche à faire avec cette clé (création, consultation, modification, suppression, impression, copie, etc....) on et de son existence, on choisit le traitement adéquat.

    - supposons que l'on veuille modifier les zones correspondants à ta clé, si elle existe on fait un MOVE (une à une ou par CORR) des zones du fichier disque vers le fichier écran qu'on affiche
    - on enchaine par une lecture du fichier écran
    A CE MOMENT, les zones dans le format du fichier disque et du fichier écran sont renseignées indépendamment les unes des autres.

    Si tu veux tester si elles ont été modifiées, il suffit de faire des IF liés par des AND ou des OR .

    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
    FD FICHIER.
    01  FICHIER-RD.
         03 Z1     PIC XXX.
         03 Z2     PIC X(7).
         03 Z3     PIC X(10).
    FD ECRAN LABEL RECORD OMITTED.
    01  FORMAT-1.
         03 Z1     PIC XXX.
         03 Z3     PIC X(10).
         03 Z2     PIC X(7).
     ....
         READ FICHIER INVALID....
         NOT INVALID MOVE CORR FICHIER-RD TO FORMAT-1
               WRITE FORMAT-1....
    .... 
         READ ECRAN....
    ....
         IF     Z1 OF FORMAT-1 = Z1 OF FICHIER-RD
            AND Z2 OF FORMAT-1 = Z2 OF FICHIER-RD
            AND Z3 OF FORMAT-1 = Z3 OF FICHIER-RD
    * ===> aucune des trois zones n'a été modifiée : inutile de faire de mise à jour du fichier 
         ELSE 
    * ===> au moins une zone a été modifiée : mise à jour du fichier par 
         MOVE CORR FORMAT-1 TO FICHIER-RD
         REWRITE FICHIER-RD INVALID....

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut
    Merci pour votre aide.
    Ce display file me permet en fait de rajouter un enregistrement dans ma table MARQUE.

    Je vérifie donc si la clé qu'on me donne existe déjà (si oui je ne peux pas rajouter l'enregistrement): ca je l'ai fait et ca fonctionne.

    Une fois ceci fait, je fais un MOVE CORR pour récupéré tous les champs complétés sur le displayfile (comme vous l'avez fait). Mais il se pourrait que l'utilisateur n'ait pas entré de NOMMARQUE ou de PRIXMOYEN. Et dans ce cas, je ne dois pas créer d'enregistrement car deux des champs seront vides!

    Je voudrais donc savoir comment tester s'il a complété ces deux champs ou non?

    Merci d'avance.

  6. #6
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Il suffit de les tester avant de les mouvementer dans l'enregistrement du fichier. Si une zone est égale à SPACES ou LOW-VALUE on affiche un message sur le format de saisie.

Discussions similaires

  1. Vérifier l'existence de mes enregistrements par un SELECT
    Par boutmos dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/09/2010, 23h17
  2. [MySQL] vérifier l'existance d'un enregistrement avant insertion
    Par patheoson dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/01/2010, 12h47
  3. vérifier l'existence d'un enregistrement
    Par haymen dans le forum C#
    Réponses: 11
    Dernier message: 09/01/2010, 14h04
  4. [AC-2003] Vérifier l'existence d'un enregistrement : DLookUp ou Select
    Par buzz73 dans le forum IHM
    Réponses: 2
    Dernier message: 22/07/2009, 13h31
  5. [Débutant]Vérifier existance d'un enregistrement dans une table
    Par fabiolous dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/04/2007, 12h01

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