PreviousNext
Help > Développement > Accès aux données de l'AS/400 > Accès natif > Verrouillages >
Attente et nombre d'essais

 

Sur un AS/400, la gestion des blocages d'enregistrement diffère de celle de WinDev : il n'est possible de bloquer qu'un seul enregistrement par fichier ouvert et par utilisateur. Par contre, il existe une gestion de file d'attente de blocages pour chaque enregistrement.

Il existe une seconde différence : à chaque tentative de blocage infructueuse (tentative de verrouillage d'un enregistrement déjà verrouillé), l'AS/400 va attendre un certain temps la libération de l'enregistrement. Le compte rendu n'est donné qu'à la fin de ce délai.

Cette attente, par défaut 60 secondes, correspond au paramètre "WAITRCD" de chaque fichier, physique et logique, utilisé par WinDev. Pour voir la valeur de ce paramètre, utilisez la commande DSPFD.

 

Le temps de réponse en verrouillage d'un enregistrement déjà verrouillé dépend donc de deux paramètres :

     WAITRCD propriété du fichier AS400,

     H.NbEssais, propriété WinDev.

 

Vous pouvez modifier ce délai sur l'AS/400 au niveau du fichier physique, par la commande CHGPF :

CHGPF FILE(LIB/FICHIER) WAITRCD(10) 

pour attendre 11 secondes

CHGPF FILE(LIB/FICHIER) WAITRCD(*IMMED)

pas d'attente, réponse immédiate

 

Le constructeur de DDS propose par défaut de compiler les fichiers avec l'option WAITRCD(*IMMED).

 

HModifie doit verrouiller l'enregistrement

Pour faire une série de modifications, il est donc vivement recommandé d’ouvrir tout de suite le fichier en écriture.

Dans le cas contraire le HModifie va devoir relire l'enregistrement pour comparer les valeurs avec le cache. En cas de données modifiées (entre la première lecture et la vérification) :

Sous WinDev : une fenêtre affiche les données d'origine et les nouvelles en demandant la confirmation de la modification.

Sous WebDev où il n'est pas possible d'afficher ce type de fenêtre, la modification risque de provoquer une erreur. Il faut donc utiliser une gestion d'erreur (HSurErreur) ou l'option DRVOPTIMISTIC des infos étendues de la connexion.

 

Le code conseillé pour une série de modifications est donc :

 

TANTQUE PAS condition

 HLitSuivant(Fichier, hBlocageEcriture)

 // affecter valeurs...

 HModifie(Fichier)

FIN

 

Exemple :

 

Countline est un entier

HOuvreConnexion(MaConnexion)

 

HLitPremier(Sp_cust,Cust_id)

TANTQUE PAS HEnDehors(Sp_cust)

 Countline++

 Sp_cust.Firstname = Countline

 HSurErreur(Sp_cust,hErrTout,proc_erreur)

 HModifie(Sp_cust)

 HLitSuivant(Sp_cust,Cust_id)

FIN

 

 

//Procédure globale

PROCEDURE proc_erreur()

SELON HErreurEtatModification(Sp_cust,hEnrFichier)

 CAS hEtatActif

  //Forcer la modification

  RENVOYER opRéessayer

  

 CAS hEtatSup

  //On ajoute l'enregistrement et on annule la modification

  RENVOYER opAnnuler

  

 AUTRE CAS

  //On annule

  RENVOYER opAnnuler

FIN