progress-4gl
Zmienne
Szukaj…
Wprowadzenie
Postęp ABL jest typowany statycznie. Zmienne należy zadeklarować, a typu danych nie można zmienić w czasie wykonywania.
Składnia
OKREŚL ZMIENNOŚĆ I JAKO INT64 INITIAL -200 NO-UNDO. // 64-bitowa liczba całkowita zainicjowana na -200
OKREŚL ZMIENNOŚĆ I JAKO LOGICZNE NIE-CZYTAJ. // Zmienna logiczna o nazwie l
OKREŚL ZMIENNOŚĆ c JAKO ZNAK NIE-Cofnij PRZYPADEK WRAŻLIWY. // Zmienna z rozróżnianiem wielkości liter („a” <> „A”).
OKREŚL ZMIENNOŚĆ dt JAKO DATĘ WEWNĘTRZNĄ DZIŚ NIE-Cofnij. // Zmienna data ustawiona na dzisiejszą datę.
OKREŚL RÓŻNORODNOŚĆ W ZAKRESIE ZNAKU 5 NO-UNDO. // Tablica znaków o długości = 5
OKREŚL ZMIENNOŚĆ j JAKO INTEGRALNY ZAKRES NIE-Cofnij. // Zasięg bez określonej długości
OKREŚL ZMIENNOŚĆ b JAKO ETYKIETA DATETIME „Godzina wyjazdu”. // Zmienna z etykietą
Podstawowe deklaracje zmiennych
/*
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.
Tablice - definiowanie i uzyskiwanie dostępu
Postęp obsługuje tablice jednowymiarowe, ale są one nazywane 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).
Poszczególne pozycje w tablicy są dostępne za pomocą „standardowych” nawiasów typu c. Ale indeks zaczyna się od 1. Maksymalny rozmiar to 28000.
a[1] = "A".
a[2] = "B".
a[3] = "C".
a[4] = "D".
a[5] = "E".
DISPLAY a[5].
Wynik:
Indeks 0 wygeneruje błąd:
DISPLAY a[0].
Wynik:
Możesz także zdefiniować nieokreśloną tablicę bez określonej długości. Długość (zakres) można ustawić w czasie wykonywania. Ale tylko raz!
DEFINE VARIABLE a AS CHARACTER EXTENT NO-UNDO.
EXTENT(a) = 10.
EXTENT(a) = 1.
Trzecia linia wyświetli następujący błąd:
Można użyć INITIAL
opcję na DEFINE VARIABLE
oświadczenie, aby ustawić wartości początkowe.
DEFINE VARIABLE a AS CHARACTER EXTENT 3 INITIAL ["one","two","three"] NO-UNDO.
/* Some statements (like DISPLAY) can handle a whole array: */
DISPLAY a.
Wynik:
Jeśli nie ustawisz wszystkich zakresów, pozostałe otrzymają ostatnią ustawioną wartość:
DEFINE VARIABLE a AS CHARACTER EXTENT 10 INITIAL ["one","two","three"] NO-UNDO.
DISPLAY a.
Wynik:
Używając słowa kluczowego LIKE
Za pomocą LIKE
możesz oprzeć definicję swojej zmiennej na innej zmiennej lub polu w bazie danych lub tabeli temperatur.
Zdefiniowanie zmiennej LIKE
pole bazy danych wymaga, aby baza danych była zawsze podłączona. Nie zawsze może być to, czego chcesz.
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".