L4G >  Update  

Afficher tout Masquer tout

Update permet de réécrire des enregistrements d'une table avec les valeurs passées en paramètre.

 

Syntaxe

   Update [ classe ] [ Where_exp ]   With champ = exp_chp [ , champ = exp_chp ]

 

Paramètres

Elément

Description

Restrictions

classe

Abréviation d'un fichier ouvert

Aucune

Where_exp

Expression_de_sélection Voir Where

Aucune

champ

nom d'un champ de la table

Aucune

exp_chp

expression donnant la valeur que doit prendre le champ

de type comptatible avec celui du champ - voir Where -

 

Exemples

   # Mise à jour du champ FLGACTIF du fichier CLIENT pour tous les
   # enregistrements dont les zones DEBIT et CREDIT sont à 0.
   
File CLIENT [CLI]
    Update [CLI] Where DEBIT = 0 and CREDIT = 0 and FLGACTIF <> 1
    & With FLGACTIF = 1
    # affichage du nombre d'enregistrements modifiés
    Infbox "enregistrements modifiés"-[S]adxuprec

   # Incrémentation du nombre d'éditions
    Update [DIV] Where FLAGEDIT & CLE >= [M]DEB1 With NBEDIT += 1

 

Description

Update permet d'affecter certains champs des enregistrements d'une table avec les valeurs passées en paramètres en faisant automatiquement les opérations de lecture, verrouillage, réécriture et déverrouillage. Cette instruction permet de simplifier l'écriture du traitement et d'accélérer ces opérations dès que plusieurs enregistrements sont en cause.

Cette instruction exploite la possibilité de faire sur les bases de données Oracle une requête de même type. Adonix ne fait que traduire les expressions passées dans un langage compréhensible à la base de données, ce qui limite le choix des fonctions possibles. On se reportera à la documentation de la clause Where pour en avoir la liste.

Update met à jour la variable fstat pour indiquer comment s'est déroulée l'opération.

fstat

Code

MàJ

Explication

0

 

Oui

La mise à jour a eu lieu correctement. adxuprec enregistrements ont été modifiés. ou aucun enregistrement n'a été sélectionné. 

1

ERLOCK

Oui et Non

En inter-blocage, dans ce cas, la transaction est abandonnée.

3

ERDUPCL

Non

Tentative de créer une clé non duplicable

Adxuprec permet de connaître le nombre d'enregistrements mis à jour par une instruction Update.

ATTENTION : on ne peut pas prévoir le comportement d'une instruction Update qui affecterait un champ avec la valeur d'un champ lui-même affecté par Update.
Exemple :
Update [FIC] With CHAMP1 = VALEUR, CHAMP2 = CHAMP1.

Tentative de mise à jour d'enregistrements verrouillés :

  • Oracle verrouille tous les enregistrements, avant toute mise à jour. 
  • SQL Server verrouille les enregistrements au fur et à mesure de ses mises à jour

Dans les deux cas, l' Update reste en attente et poursuit sa mise à jour lorsque l'enregistrement se libère. Par contre, en inter-blocage,  l' Update arrête sa mise à jour et envoie un fstat=1.

Update ne modifie pas les variables de la classe [F] correspondant au fichier.

 

Remarques

On ne peut pas utiliser une abréviation de lien pour mettre à jour un fichier.

La mise à jour par Update doit se faire à l'intérieur d'une transaction.

En cours de transaction, les modifications ne seront pas visibles par les autres utilisateurs.

Chaque verrouillage d'enregistrement "réussi" implique l'attribution d'un verrou, mais le verrou n'est libéré qu'à la fin de la transaction. Toute base utilise ses propres verrous et leur nombre est limité par un des paramètres de la base. Dans le cas où cette ressource serait épuisée, Adonix générera un erreur n 43 (FISLOCK). Il faudra alors, soit faire augmenter le nombre de verrous, soit modifier le programme, soit gérer cette erreur.

Le verrouillage dépend de la base de données. Il est indépendant de la valeur de [S]lockwait. Sous Oracle, Sql-serveur, Db2 la tentative de verrouillage se fera sans limitation de durée et sans possibilité de l'interrompre. Verrouiller la table dans son ensemble par Lock [abvf] est un moyen brutal, mais sûr d'éviter tout problème.

 

Erreurs associées

Erreur

Description

ERMODE (10)

Type de paramètres incompatibles avec les zones du fichier à modifier.

ERCLAS ( 7)

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

 

Mots-clés associés

 WHERE - READLOCK - FILE - REWRITE - TRBEGIN - FSTAT - FILTER - ADXUPREC