L4G >  Rewrite  

Afficher tout Masquer tout

Rewrite permet de réécrire un enregistrement donné sur une table.

 

Syntaxe

    Rewrite [ classe ] [ clé ] [ mode_lect [ valeur_clé ] ]

 

Paramètres

Elément

Description

Restrictions

clé

Désignation de la clé d'un fichier sous l'une des formes suivantes :
nom_de_variable
nom_de_variable '('
exp_ind ')'

La clé doit être définie dans une clause Order By ou en paramétrage de la table.

exp_ind

Expression entière du nombre de parties de clés utilisées. Par défaut, toute la clé est utilisée.

0 <=exp_ind <=nombre de composantes de la clé (au plus 8).

mode_lect

L'un des mots-clés suivants, ou l'un des opérateurs suivants :

mot-clé

opérateur

Mode de lecture utilisé

First
Last
Curr
Prev
Next







>=
>
=
<
<=

1er enregistrement
Dernier enregistrement
Enregistrement courant
Enregistrement précédent
Enregistrement suivant
Clé >= valeur_clé
Clé > valeur_clé
Clé = valeur_clé
Clé < valeur_clé
Clé <= valeur_clé

valeur_clé

Liste d'expressions séparées par ';' correspondant aux valeurs des sous-clés.

valeur compatible avec le type de la sous-clé.

 

Exemples

    # Lecture d'un enregistrement pour modification du champ ZONE
     Trbegin TEST [TEST]
     Readlock [TEST]CLE2(1) = date$
     If [S]fstat
        [TEST]ZONE += 100
       
Rewrite [TEST]
        Commit
       Else
        Rollback
     Endif

    # Décalages d'enregistrements
    # (l'enregistrement no 2 est écrit sur le 1, le 3 sur le 2, etc..)
    # Ne fonctionne que sur un fichier non vide et sans clés uniques.
     Read [TEST]CLE First
     Read [TEST]CLE Next
     While fstat=0
       
Rewrite [TEST]CLE Prev
        Read [TEST]CLE Next
        Read [TEST]CLE Next
     Wend

 

Description

Rewrite permet de réécrire de nouvelles valeurs dans un enregistrement lu selon les divers modes énumérés dans le tableau précédent. Si on ne donne pas de valeur de clé pour les modes qui en demandent une ( '<', '>', '<=', '>=', '=' ), la valeur courante des variables de la classe [F] correspondant au fichier est utilisée.

Si aucun mode de lecture n'est donné, le mode Curr sera utilisé et l'enregistrement courant (c'est-à-dire le dernier lu) est modifié.

Les clés utilisables dans Rewrite sont :

  • la clé définie dans la dernière clause Order By (s'il y en a une);
  • sinon, l'une des clés définies en paramétrage du fichier.

On peut omettre dans la syntaxe de Rewrite l'abréviation du fichier ou le nom de la clé :

  • dans le premier cas, le fichier utilisé est le premier dans la liste des tables par défaut;
  • dans le deuxième cas, la clé utilisée est la clé courante. Son numéro est donné par la variable système Adonix currind.

La variable fstat indique comment s'est déroulée l'écriture.

fstat

Code

Ecr.

Explication

0

spacer.gif (822 octets)

Oui

La réécriture a eu lieu correctement.

1

ERLOCK

Non

L'enregistrement est verrouillé.

2

ERECIND

Oui

En mode de lecture <= ou >= , signale que la lecture a eu lieu, mais que la clé trouvée est < ou > à la valeur recherchée.

3

ERDUPCL

Non

Tentative de création d'une clé dupliquée.

4

ERDEBF

Non

Début/Fin de fichier

5

ERPALEC

Non

Aucun enregistrement correspondant aux valeurs demandées.

Lorsque la réécriture a réussi (c'est-à-dire si fstat est nul ou vaut éventuellement ERECIND), l'enregistrement devient l'enregistrement courant du fichier.

 

Remarques

En attendant la fin de la transaction, les modifications ne seront pas visibles par les autres utilisateurs, sous Oracle, alors qu'elles le seront sous Sql-serveur. En effet, Adonix utilise pour Sql-serveur la technique du "dirty read"( ou read uncommited) c'est à dire que les écritures non encore commitées sont vues par les utilisateurs. 
En fait, SQL-serveur offre la possibilité de faire des read "commited", mais dans ce cas, la lecture bloque sur les enregistrements modifiés ( contrairement à Oracle qui va lire dans les rollbacks-segments) ce qui risque d'engendrer des ralentissements tout particulièrement sur les listes gauches.  

Il n'est pas possible d'utiliser une abréviation de lien pour réécrire un enregistrement.

La modification d'un enregistrement doit se faire à l'intérieur d'une transaction.

L'enregistrement à réécrire sera de toute façon verrouillé et la réécriture ne se fera que si cette opération a réussi, sinon [S]fstat sera positionné à 1. Se reporter à la documentation sur Readlock pour les problèmes concernant les verrouillages d'enregistrements.

Dès qu'on a plusieurs enregistrements à mettre à jour, l'instruction Update peut-être plus rapide.

 

Erreurs associées

Erreur

Description

MODIN (22)

Mode de lecture incorrect.

ERINDI ( 8)

Le nombre de valeurs données ou l'indice indiqué, dépasse le nombre d'éléments de la clé.

PACLE (21)

La clé est inexistante sur ce fichier.

ERCLAS ( 7)

La classe fichier n'existe pas (fichier non ouvert).

 

Mots-clés associés

FILE - READLOCK - TRBEGIN - UPDATE - WRITE - FSTAT