Reserver
Instruction
Rôle : |
Réservation d'une table dans sa totalité ou bien passage en mode réservation d'enregistrement. |
Notes : |
Durée de validité des réservations :
Les réservations au niveau de la table comme au niveau de l'enregistrement sont locales à un objet. Elles sont conservées tant que l'objet est lancé (Voir ci-dessous). La sortie de l'objet entraîne la libération de toutes les tables ouvertes et de leurs enregistrements.
Syntaxe 1 : |
Reserver <code table> |
Cette syntaxe permet de déclarer une réservation globale d'une table.
Cette réservation globale trouve son utilité lorsque l'utilisateur désire être seul à créer, modifier ou annuler dans la table. En revanche, elle n'empêche pas un autre utilisateur de lire la table (à moins que celui-ci ne soit en mode Reserver code table,"E").
Elle pourra aussi être utilisée lorsque l'utilisateur voudra travailler sur un état figé de la table (par exemple pour éditer une table à un instant donné, en étant sûr que personne ne viendra faire des modifications dans la table en cours d'édition : voir le programme donné en exemple ci-après).
Elle empêche un autre utilisateur d'effectuer une réservation globale ou la réservation d'un enregistrement sur la même table.
Syntaxe 2 : |
Reserver <code table>, "F " |
Cette syntaxe permet de déclarer une réservation globale d'une table.
Cette réservation globale trouve son utilité lorsque l'utilisateur désire être seul à créer, modifier ou annuler dans la table. En revanche, elle n'empêche pas un autre utilisateur de lire la table (à moins que celui-ci ne soit en mode Reserver code table,"E").
Elle pourra aussi être utilisée lorsque l'utilisateur voudra travailler sur un état figé de la table (par exemple pour éditer une table à un instant donné, en étant sûr que personne ne viendra faire des modifications dans la table en cours d'édition : voir le programme donné en exemple ci-après).
Elle empêche un autre utilisateur d'effectuer une réservation globale ou la réservation d'un enregistrement sur la même table.
L'instruction Liberer table ,"F" permet de libérer la table et de quitter l'état de réservation installé par Reserver code table.
Syntaxe 3 : |
Reserver <code table>, "E " |
La réservation d'un enregistrement de table est obtenue avec cette syntaxe.
Dès lors que cette instruction est exécutée, toute lecture d'un enregistrement obtenue par les fonctions Lire, LireSuivant, LirePrecedent, LirePremier, LireDernier, Rechercher s'accompagne de la réservation de celui-ci.
Une seconde lecture sur la même table provoquera :
• la libération de l'enregistrement précédemment réservé,
• la réservation de l'enregistrement atteint.
Dès qu'un enregistrement est réservé, les autres objets travaillant sur la même table ne peuvent modifier, détruire et réserver le même enregistrement. En outre, un autre utilisateur ne pourra pas réserver globalement la table.
Dans l'exemple2 donné plus loin, l'utilisateur vient de saisir un code article. QTE correspond à une variable représentant la quantité commandée pour un article donné. Lorsque l'utilisateur a saisi QTE, on s'apprête à réserver l'enregistrement de la table ART correspondant à l'article commandé pour mettre à jour la quantité en stock.
On fait cette réservation par l'intermédiaire de l'instruction Reserver ART,"E" afin de ne pas bloquer les autres postes qui voudraient accèder à la table.
Lorsque la lecture a abouti, l'enregistrement est alors réservé : la mise à jour peut s'effectuer. Après la mise à jour, on libère l'enregistrement réservé par Liberer ART,"E" ou, éventuellement par Liberer ART.
Lors du changement de contexte, les réservations posées sur l'ancien contexte sont conservées. Dans le nouveau contexte, il est possible de faire à nouveau une réservation globale de la table ou de passer en mode Reserver ...,"E". Il faut alors prendre en compte les considérations suivantes :
• Il est préférable d'exécuter l'instruction Liberer en sortie de contexte si Reserver a été utilisé dans ce contexte.
• En réseau, on ne peut réserver un enregistrement dans le contexte appelé si celui-ci l'est déjà dans le contexte appelant (ou dans le contexte appelant du contexte appelant, etc. ...).
Liberer, Lire, LireSuivant, LirePrecedent, LirePremier, LireDernier, Rechercher |
Exemple 1 : Syntaxe 1
Domaine :
ESSAI "Edition des clients avec réservation de la table"
Objet EDITION : RESCL
Declaration
TABLE :
CLIENT
PERIPH :
I
FinDeclaration
Methode
DEBUT
Reserver CLIENT
FinMethode
Methode
TABULATION
Editer
CODE,NOM,VILLE
FinMethode
Methode
POUR_TOUT
Tabuler
FinMethode
Methode
FIN
Liberer
CLIENT
FinMethode
FinObjet
Après l'appel à la méthode JE_TESTE :
Réservation de la table CLIENT pendant l'édition des clients et libération de la table à la fin de l'édition.
Exemple 2 : Syntaxe 3
Objet TRAITEMENT : RESART "Mise à jour d'une quantité dans un enregistrement"
Methode FAIRE
Reserver ART,"E"
Si Lire (ART.CODE, EgalA, "ART001") Alors
ART.QTE=ART.QTE+1
Modifier TABLE
FinSi
Liberer ART,"E"
FinMethode
FinObjet
Après l'appel à la méthode JE_TESTE :
Réservation de l'enregistrement avant toute modification puis libération de l' enregistrement.