TRBEGIN |
Trbeginpermet d'ouvrir des tables en lecture/écriture et définit le début d'une transaction.
Trbegindecl_fic [ , decl_fic ]
Elément | Description | Restrictions |
Dans un même ordre, on peut mélanger ces descriptions pour des fichiers différents. | ||
Identification d'un fichier sous une desformes suivantes : | classe désigne l'abréviation d'un fichier. | |
Constante chaîne de caractères contenant le nom du fichier. | Le fichier doit être accessible. | |
Expression de type Char dont le résultat est le nom du fichier. | Aucune. |
# Déclaration du fichier HISTORIQUE avec l'abréviation définie en
# paramétrage, et du fichier CLIENT avec l'abréviation CLI.
Trbegin HISTORIQUE,CLIENT [CLI]
# Utilisation de 2 fichiers comptes issus de 2 comptabilités. COMPTA1
# et COMPTA2 sont des noms d'applications
Trbegin"COMPTA1.COMPTES" [CPT1], "COMPTA2.COMPTES" [CPT2]
# Déclaration du même fichier 2 fois sous des abréviations différentes
# Ainsi on pourra avoir 2 enregistrements courants pour un même
# fichier, et par exemple faire des liens du fichier sur lui-même
Trbegin COMPTES[CPT1], COMPTES [CPT2]
# Déclaration de fichiers identifiés respectivement par une
# abréviation (le fichier TOTO est donc nécessairement déjà ouvert),
# le nom d'une application (GESCOM), un chemin d'accès et une
# expression de type chaîne de caractères.
Trbegin [TOTO],"GESCOM.CLIENTS", "/usr/adonix/table1", = FIC_SAISI
# Déclaration de 12 fichiers déjà ouverts.
Trbegin[A1],[A2],[A3],[A4],[A5],[A6],[A7],[A8],[A9],[AA],[AB],[AC]
# Fichier externe
extfile(3) = "/usr/adonix/TEST"
File EX3
# Transaction : on débite un compte CPT_D et crédite un compte CPT_C
# d'une même valeur TRANSFERT . Au retour du sous-programme,
# SUCCES=1 si tout s'est bien passé, et SUCCES=0 sinon.
TRANSFERT_SOMME
File COMPTE [CPT] #
# Début de transaction
Trbegin
#
# On débite le premier compte
Readlock [CPT]NOCPT = CPT_D
If fstat : Goto ABANDON : Endif
[CPT]SOLDE -= TRANSFERT
Rewrite [CPT]
If fstat : Goto ABANDON : Endif
#
# On crédite le second compte
Readlock [CPT]NOCPT = CPT_C
If fstat : Goto ABANDON : Endif
[CPT]SOLDE += TRANSFERT
Rewrite [CPT]
If fstat : Goto ABANDON : Endif
#
# Validation de la transaction et retour.
Commit : SUCCES = 1
Return
#
# Annulation de la transaction et retour en cas d'erreur
ABANDON
Rollback : SUCCES = 0
Return
Trbeginpermet de déclarer les tables utilisées en lecture/écriture dans une transaction et de démarrer la transaction c'est-à-dire un ensemble d'opérations de mise à jour de fichiers et/ou de compteurs ainsi que pour toute opération de verouillage/déverrouillage devant être validées globalement par l'instruction Commit, ou annulées globalement par Rollback.
Un fichier peut être identifié par :
Si le nom est donné, le fichier est d'abord recherché dans l'application courante, puis, s'il ne s'y trouve pas, il le sera successivement dans les applications de référence.
L'abréviation utilisée lors des opérations sur ce fichier sera celle donnée en paramétrage sauf si elle est précisée dans l'ordre Trbegin.
La syntaxe Trbegin classe permet de re-déclarer un fichier ouvert au préalable par File; ceci permet de conserver l'enregistrement courant, la sélection courante et - le cas échéant - la nouvelle clé.
L'instruction Trbegin crée les classes de variables [F] et [G] et met à jour les variables [S]fileabre et [S]filename.
L'instruction Trbegin met à jour la liste des tables ouvertes en ajoutant celles définies dans l'instruction. Les tables précédemment ouvertes par File ou Local File seront "réouvertes" à moins qu'on ait utilisé la syntaxe Trbegin classe. Cette "réouverture" a pour conséquences :
Mais à la fin de la transaction - qu'elle se soit finie par Commit ou par Rollback, tout redeviendra comme avant le Trbegin.
ATTENTION : cette "réouverture" ne concerne pas l'instruction Filter : une sélection par Filter faite sur le fichier "réouvert" par Trbegin, continuera à s'appliquer sur le fichier même après le Commit (ou le Rollback).
Il est interdit d'initier une transaction s'il y en a déjà une en cours.
Une transaction ne peut être validée (ou annulée) que par le traitement ou le sous-programme qu'il l'a initiée. C'est le cas en particulier d'un sous-programme appelé en cas d'erreur (Onerrgo), en cas d'inerruption (Onintgo) ou encore en cas de déconnexion (actihgup) ce sous-programme ne pourra pas faire de Commit ni de Rollback. Il est à noter que si un de ces traitements mettent fin au programme, la transaction en cours sera automatiquement annulée (Rollback).
La table mentionnée en premier dans l'instruction devient la table par défaut. Ceci pourra être modifié par l'instruction Default File.
Lorsque l'on utilise la syntaxe Trbegin nom_d'OBJet, Adonix considère d'abord qu'il s'agit d'un nom de fichier, puis en cas d'échec, il essaie de trouver une entrée de même nom dans la table des fichiers.
Les tables Oracle ne correspondant pas à des fichiers Unix, on ne peut pas les ouvrir en donnant un chemin.
En base de données Oracle, l'ouverture d'une table prend un temps non négligeable. On se limitera donc aux seuls fichiers indispensables, et on ne réouvrira pas un fichier déjà ouvert.
On ne peut ouvrir une table Oracle que s'il on est déjà connecté à la base Oracle.
Sous Oracle, on ne pourra pas - à priori - accéder à une table d'une base (au sens Oracle du terme) autre que la base courante. D'autre part, on peut rencontrer des problèmes de droits d'accès propre à Oracle.
Il ne faut pas initier de transaction à l'intérieur d'une boucle For ... With Lock et portant sur un des fichiers déroulé par le For car, sous Oracle on sortirait aussitôt de la boucle.
Pour supprimer de la mémoire des tables ouvertes par Trbegin, on utilisera les instructions Close File. Mais les canaux correspondant à ces tables ne seront pas refermées avant la fin de la transaction.
Après Trbegin, il est illusoire de déverrouiller (un fichier, un symbole ou un enregistrement). En effet les déverrouillages n'auront lieu qu'à la fin de la transaction (que ce soit par Commit ou par Rollback) et ceci de façon automatique. Le programmeur devra être sensibilisé au fait que les verrous d'enregistrement sont limités par un paramètre de la base.
Si le traitement ou le sous-programme se termine sans que la transaction ait été validée ou annulée, elle sera automatiquement annulée (Rollback). L'utilisateur en sera averti.
La mise à jour effective de la base de donnée ne se fera qu'au moment de la validation de la transaction - le cas échéant. Les données nouvelles ou modifiées ne sont pas visibles par les autres utilisateurs, mais les données supprimées le restent.
Dans tous les cas, les données (enregistrements ou compteurs) sur lesquelles portent les transactions (Write, Rewrite, Delete, Update et affectation de compteur) sont automatiquement verrouillées. Pour ces raisons, il convient d'écrire des transactions les plus rapides possibles, et surtout de ne pas faire de saisie à l'intérieur d'une transaction car une saisie peut rester en attente un temps indéfini.
Après Trbegin, il est encore possible - bien que déconseillé - de déclarer de nouvelles tables; il faudra alors le faire en mode Local. Elles seront automatiquement refermées à la fin de la transaction.
ERMODE(10) | Lenom du fichier n'est pas de type alphanumérique. |
TROFIC(29) | Tropde fichiers ouverts simultanément. |
PAFIC(20) | Fichiernon trouvé. |
ERCLAS( 7) | Abréviationnon trouvée. |
ERREOP(28) | Ouvertured'une même table 2 fois. |
ERACCE(27) | Erreurd'accès au fichier (droits unix). |
DEJTRAN(49) | Ilexiste déjà une transaction en cours. |
FILE - COMMIT - ROLLBACK - ADXMTO - DEFAULT - CLOSE - LOCK
Adonix X3(r) L4G |