Bonjour 
 
Le message d'erreur dans mon historique de travail est :
Code : Tout sélectionner
ID message . . . . . . :   CPF502E                                            
Date d'envoi . . . . . :   11/06/13      Heure d'envoi  . . . . :   09:48:24                                                                          
Message . . . . :   Les contraintes référentielles n'ont pas pu être validées 
  pour le membre TABLEI01.                                                  
Cause . . . . . :   L'opération en cours sur le membre TABLEI01, fichier    
  TABLEI01, bibliothèque BIBLITEST a échoué. La contrainte TABLE2_TABLE 
  pour le fichier dépendant TABLE dans la bibliothèque BIBLITEST et pour le
  fichier parent TABLE2 dans la bibliothèque BIBLITEST n'a pas pu être      
  validée. Le numéro d'enregistrement 375855 dans le membre TABLE2, fichier  
  TABLE2, bibliothèque BIBLITEST, a été verrouillé par le travail           
  904515/QUSER/QZDASOINIT. Si le numéro d'enregistrement est 0, le fichier    
  TABLE2 de la bibliothèque BIBLITEST est verrouillé par le travail         
  904515/QUSER/QZDASOINIT. Le nom du travail n'est pas disponible s'il a la   
   valeur *N.                                                                
 Que faire . . . :   Renouvelez votre demande lorsque l'enregistrement ou le 
   fichier n'est plus verrouillé.                                            
La contrainte de TABLE vers TABLE2 est :
Code : Tout sélectionner
alter table TABLE                                         
    foreign key TABLE2_TABLE (CHAMP_2)                
       references TABLE2 (CHAMP_1) on delete restrict   
                                   on update no action; 
l'index TABLEI01 n'est pas "unique index".
En debut du programme PROGR1, je recherche l'enregistrement parent dans TABLE2 par un appel à un programme de service PROGR3 qui contient entre autres :
Code : Tout sélectionner
 FTABLE2I01IF    E           K Disk    Rename(TABLE2:TABLE201F) 
...
     C     KTABLE2       Chain     TABLE2I01F    
En début de mon programme de service PROGR1 :
Si l'enregistrement parent est trouvé je prépare puis je fais  le write de TABLE, qui me pose prb.
Si l'enregistrement parent n'est pas trouvé,  l'enregistrement parent dans TABLE2 est créé,
par un CallP à un autre programme de service PROGR2.
Dans PROGR2 le fichier TABLE2 est déclaré, ouvert, écrit et fermé :
Code : Tout sélectionner
     FTABLE2    O    E             Disk    Rename(TABLE2:TABLE2F) Commit
     F                                     UsrOpn                                  
...
     C                   If        Not %Open(TABLE2)                            >1
     C                   Open      TABLE2
     C                   EndIf                                                  <1  
...
     C                   Write     TABLE2F  
...
     C                   If        %Open(TABLE2)                               >1
     C                   Close     TABLE2
     C                   EndIf                                                  <1     
puis j'appelle à nouveau PROGR3 pour rechercher l'enregistrement parent dans TABLE2 :
Code : Tout sélectionner
 FTABLE2I01IF    E           K Disk    Rename(TABLE2:TABLE201F) 
...
     C     KTABLE2       Chain     TABLE2I01F    
juste avant le write dans PROGR1:
Code : Tout sélectionner
...
     C                   Write     TABLEF1                            50
      * clé en double
     C   50              Eval      P_Retour = '02'   
...
Au debogueur dans PROGR1, l'enregistrement CHAMP_2 est préparé pour écrire dans TABLE avec dans CHAMP_2 la même valeur que dans son parent de TABLE2.
Dans STRSQL, l'enregistrement numéro 375855 de TABLE2 est bien créé avec dans CHAMP_1 la même valeur que dans son enfant de TABLE.
 
 J'ai aussi cette erreur
Code : Tout sélectionner
 ID message . . . . . . :   CPF4028                                             
Date d'envoi . . . . . :   11/06/13      Heure d'envoi  . . . . :   13:34:40   
Message . . . . :   Ouverture du membre TABLE2 changée en SEQONLY(*NO).       
Cause . . . . . :   Le membre TABLE2, TABLE2, BIBLITEST a été ouvert avec   
  SEQONLY(*YES) dans le pgm ou dans la commande OVRDBF. Or, ce paramètre a été 
  remplacé par SEQONLY(*NO) en raison de l'erreur 1.                           
    1 - Le programme a ouvert le membre TABLE2 en écriture seule.             
  SEQONLY(*YES) était défini avec le nombre d'enreg par défaut. Ce paramètre a 
  été remplacé par SEQONLY(*NO) afin de permettre au programme de gérer les    
  clés en double, le mappage de données, le mappage de clés et les erreurs de  
  sélection et/ou d'omission lors de l'écriture.                               
  Que faire : Erreur 1 ou 6 :                                                   
    -- Si le remplacement du paramètre SEQONLY(*YES) par SEQONLY(*NO) n'est   
  pas accepté, remplacez-le en indiquant SEQONLY(*YES N) dans la commande     
  OVRDB, N spécifiant le nombre d'enregistrements.  Renouvelez votre demande. 
  
  Je ne vois pas dans le code où changer ce paramêtre.
  
Quelqu'un pourrait il m'éclairer du pourquoi un enregistrement reste locké alors que le fichier a été fermé ?