Поиск…


Вступление

Прогресс ABL статически типизирован. Переменные должны быть объявлены, а тип данных не может быть изменен во время выполнения.

Синтаксис

  • ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОГО И КАК INT64 ИНИЦИАЛ -200 NO-UNDO. // 64-разрядное целое число, инициализированное значением -200

  • DEFINE VARIABLE l AS LOGICAL NO-UNDO. // Логическая переменная с именем l

  • ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОГО КАК ХАРАКТЕР НЕТ-УНДО СЛУЧАЙНЫЙ. // Вещественная чувствительность ('a' <> 'A').

  • ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОГО ДАТА КАК ДАТА ИНЦИАЛЬНОГО СЕГОДНЯ NO-UNDO. // Дата переменной, установленная на сегодняшнюю дату.

  • ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОГО КАК ХАРАКТЕР РАЗДЕЛ 5 НЕТ-UNDO. // Массив символов с длиной = 5

  • ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОГО В КАЧЕСТВЕ ИНТЕГРИРОВАННЫХ НЕТ-UNDO. // Объем без заданной длины

  • DEFINE VARIABLE b AS DATETIME LABEL «Время отправления». // Переменная с меткой

Основные объявления переменных

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

Массивы - определение и доступ

Прогресс поддерживает одномерные массивы, но они называются 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).

Отдельные позиции, к которым обращается массив, используются «стандартные» скобки c-стиля. Но индекс начинается с 1. Максимальный размер составляет 28000.

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

DISPLAY a[5].

Результат:

введите описание изображения здесь

Индекс 0 будет генерировать ошибку:

DISPLAY a[0].

Результат:

введите описание изображения здесь

Вы также можете определить неопределенный массив без заданной длины. Длина (протяженность) может быть установлена ​​во время выполнения. Но только один раз!

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

Третья строка выдаст следующую ошибку: введите описание изображения здесь

Вы можете использовать INITIAL опцию на DEFINE VARIABLE заявлении задать начальные значения.

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

Результат:

введите описание изображения здесь

Если вы не установите все экстенты, оставшееся получит последнее установленное значение:

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

Результат:

введите описание изображения здесь

Использование ключевого слова LIKE

Используя LIKE вы можете определить определение переменной в другой переменной или поле в базе данных или в таблице temp.

Определение переменной LIKE поле базы данных требует, чтобы база данных всегда была подключена. Это может быть не всегда то, что вы хотите.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow