Recherche…


Introduction

Progress ABL est typé statiquement. Les variables doivent être déclarées et le type de données ne peut pas être modifié pendant l'exécution.

Syntaxe

  • DÉFINIR VARIABLE COMME INT64 INITIAL -200 NO-UNDO. // Un entier de 64 bits initialisé à -200

  • DÉFINIR VARIABLE L AS NON LOGIQUE. // Une variable logique nommée l

  • DEFINIR VARIABLE c COMME CARACTERE SANS AUCUN CAS. // Une variable sensible à la casse ('a' <> 'A').

  • DÉFINIR VARIABLE dt DATE INTIALE AUJOURD'HUI NON-UNDO. // Une variable de date définie sur la date du jour.

  • DÉFINIR VARIABLE ET COMME CARACTÈRE EXTENT 5 NO-UNDO. // Un tableau de caractères avec une longueur = 5

  • DÉFINIR VARIABLE j COMME INTÉRIEUR EXTENT NO-UNDO. // une étendue sans longueur définie

  • DEFINE VARIABLE b AS DATETIME LABEL "Heure de départ". // Une variable avec une étiquette

Déclarations de variables de base

/*                                                                                                                                                                                                                                                
These variables are declared with `NO-UNDO`.
That states that no undo handling is wanted for this specific variable 
in case of a transactional roll-back. 

This should always be the default unless transactional control over 
this variable is a requirement. 
*/

/* Strings. A character longer than 32K should be a longchar */
DEFINE VARIABLE c   AS CHARACTER   NO-UNDO.
DEFINE VARIABLE cl  AS LONGCHAR    NO-UNDO.

/* Integers and decimals. INTEGER = 32 bit. INT64 = 64 bits */
DEFINE VARIABLE i   AS INTEGER     NO-UNDO.
DEFINE VARIABLE j   AS INT64       NO-UNDO.
DEFINE VARIABLE k   AS DECIMAL     NO-UNDO.

/* Date and datetimez. Unset variables have the unknown value ? */
DEFINE VARIABLE d   AS DATE        NO-UNDO.
DEFINE VARIABLE dt  AS DATETIME    NO-UNDO.
DEFINE VARIABLE dtz AS DATETIME-TZ NO-UNDO.

/* LOGICAL = Boolean data. True or false (or ?) */
DEFINE VARIABLE l   AS LOGICAL     NO-UNDO.

/* Rowids and recids are internal identifiers to database records */
DEFINE VARIABLE rid AS ROWID       NO-UNDO.
DEFINE VARIABLE rec AS RECID       NO-UNDO.

/* A handle is a handle to anything: a session, an on screen widget etc */
/* A Com-handle is used for ActiveX Com-automation */
DEFINE VARIABLE h   AS HANDLE      NO-UNDO.
DEFINE VARIABLE hc  AS COM-HANDLE  NO-UNDO.

/* A raw variable can contain any data. Binary, strings etc */
DEFINE VARIABLE rw  AS RAW         NO-UNDO.

/* A mempointer contains a sequence of bytes in memory. */
DEFINE VARIABLE m   AS MEMPTR      NO-UNDO.

Tableaux - définition et accès

Progress prend en charge les tableaux à une dimension, mais ils sont appelés EXTENTS .

/* Define a character array with the length 5, and display it's length */
DEFINE VARIABLE a AS CHARACTER EXTENT 5 NO-UNDO.
DISPLAY EXTENT(a).

Positions individuelles i le tableau est accessible en utilisant des crochets de style c "standard". Mais l'index commence à 1. La taille maximale est 28000.

a[1] = "A".
a[2] = "B".
a[3] = "C".
a[4] = "D".  
a[5] = "E".

DISPLAY a[5].

Résultat:

entrer la description de l'image ici

L'index 0 va générer une erreur:

DISPLAY a[0].

Résultat:

entrer la description de l'image ici

Vous pouvez également définir un tableau indéterminé sans longueur définie. La longueur (étendue) peut être définie au moment de l'exécution. Mais seulement une fois!

DEFINE VARIABLE a AS CHARACTER EXTENT NO-UNDO.
EXTENT(a) = 10.
EXTENT(a) = 1.

La troisième ligne comportera l'erreur suivante: entrer la description de l'image ici

Vous pouvez utiliser l'option INITIAL de l'instruction DEFINE VARIABLE pour définir les valeurs initiales.

DEFINE VARIABLE a AS CHARACTER EXTENT 3 INITIAL ["one","two","three"] NO-UNDO.
/* Some statements (like DISPLAY) can handle a whole array: */
DISPLAY a.

Résultat:

entrer la description de l'image ici

Si vous ne définissez pas toutes les extensions, la dernière valeur définie sera la suivante:

DEFINE VARIABLE a AS CHARACTER EXTENT 10 INITIAL ["one","two","three"] NO-UNDO.
DISPLAY a.

Résultat:

entrer la description de l'image ici

Utilisation du mot clé LIKE

En utilisant LIKE vous pouvez baser la définition de votre variable sur une autre variable ou un champ dans une base de données ou une table temporaire.

Définir une variable LIKE un champ de base de données nécessite que la base de données soit toujours connectée. Ce n'est peut-être pas toujours ce que vous voulez.

DEFINE VARIABLE i AS INTEGER NO-UNDO LABEL "Nr" FORMAT "99999".
/* Define a variable with the same properties as "i" */
DEFINE VARIABLE j LIKE i.

/* Define a variable based on Customer.Custnum from the sports2000 database but 
override the label-definition */    
DEFINE VARIABLE k LIKE Customer.Custnum LABEL "Client".


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow