Buscar..


Introducción

El progreso ABL se escribe estáticamente. Las variables deben declararse y el tipo de datos no se puede cambiar durante el tiempo de ejecución.

Sintaxis

  • DEFINIR VARIABLE i AS INT64 INICIAL -200 NO-UNDO. // Un entero de 64 bits inicializado a -200

  • DEFINE VARIABLE l COMO LÓGICO NO-UNDO. // Una variable lógica llamada l

  • DEFINIR VARIABLE c COMO SENSIBLE AL SISTEMA DE CARACTER SIN CARACTER. // Una variable que distingue entre mayúsculas y minúsculas ('a' <> 'A').

  • DEFINICIÓN DE VARIABLE COMO LA FECHA INTERNACIONAL HOY NO-UNDO. // Una variable de fecha establecida en la fecha de hoy.

  • DEFINIR LA VARIABLE a COMO EXTENSIÓN DE CARÁCTER 5 NO-UNDO. // Una matriz de caracteres con longitud = 5

  • DEFINIR VARIABLE j COMO INTEGER EXTENTE NO-UNDO. // Una extensión sin una longitud determinada

  • DEFINIR VARIABLE b COMO ETIQUETA DE FECHA "Hora de salida". // Una variable con una etiqueta

Declaraciones variables básicas

/*                                                                                                                                                                                                                                                
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.

Arrays - definición y acceso

El progreso admite matrices unidimensionales, pero se llaman 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).

Posiciones individuales i se accede a la matriz utilizando corchetes de estilo c "estándar". Pero el índice comienza en 1. El tamaño máximo es 28000.

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

DISPLAY a[5].

Resultado:

introduzca la descripción de la imagen aquí

El índice 0 generará un error:

DISPLAY a[0].

Resultado:

introduzca la descripción de la imagen aquí

También puede definir una matriz indeterminada sin una longitud establecida. La longitud (extensión) se puede establecer en tiempo de ejecución. ¡Pero sólo una vez!

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

La tercera línea procurará el siguiente error: introduzca la descripción de la imagen aquí

Puede usar la opción INITIAL en la sentencia DEFINE VARIABLE para establecer los valores iniciales.

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

Resultado:

introduzca la descripción de la imagen aquí

Si no establece todas las extensiones, el resto obtendrá el último valor establecido:

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

Resultado:

introduzca la descripción de la imagen aquí

Usando la palabra clave LIKE

Usando LIKE puede basar la definición de su variable en otra variable o un campo en una base de datos o tabla temporal.

La definición de una variable LIKE un campo de base de datos requiers la base de datos para estar siempre conectada. Esto podría no ser siempre lo que quieres.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow