Suche…


Einführung

Fortschritt ABL ist statisch typisiert. Die Variablen müssen deklariert werden und der Datentyp kann nicht zur Laufzeit geändert werden.

Syntax

  • DEFINE VARIABLE IN INT64 INITIAL -200 NO-UNDO. // Eine 64-Bit-Ganzzahl, die mit -200 initialisiert wurde

  • DEFINE VARIABLE L ALS LOGISCHES NO-UNDO. // Eine logische Variable mit dem Namen l

  • DEFINE VARIABLE c ALS CHARAKTER NO-UNDO FALLSENSITIV. // Eine case-sensitive ('a' <> 'A') Variable.

  • DEFINE VARIABLE Dt WIE DATUM INTIAL HEUTE NO-UNDO. // Eine Datumsvariable, die auf das heutige Datum gesetzt ist.

  • DEFINE VARIABLE A AS CHARACTER EXTENT 5 NO-UNDO. // Ein Zeichenfeld mit Länge = 5

  • DEFINE VARIABLE J WIE INTEGER NO-UNDO. // Ein Bereich ohne festgelegte Länge

  • VARIABLE DEFINIEREN b AS DATETIME LABEL "Abfahrtszeit". // Eine Variable mit einem Label

Grundlegende Variablendeklarationen

/*                                                                                                                                                                                                                                                
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 - Definieren und Zugreifen

Progress unterstützt eindimensionale Arrays, die jedoch 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).

Einzelne Positionen, auf die auf das Array zugegriffen wird, werden mit "Standard" -Klammern im c-Stil aufgerufen. Der Index beginnt jedoch bei 1. Die maximale Größe beträgt 28000.

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

DISPLAY a[5].

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Index 0 erzeugt einen Fehler:

DISPLAY a[0].

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Sie können auch ein unbestimmtes Array ohne festgelegte Länge definieren. Die Länge (Ausdehnung) kann zur Laufzeit eingestellt werden. Aber nur einmal!

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

Die dritte Zeile gibt den folgenden Fehler aus: Geben Sie hier die Bildbeschreibung ein

Sie können die Option INITIAL in der DEFINE VARIABLE Anweisung verwenden, um Anfangswerte INITIAL .

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

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie nicht alle Ausdehnungen festlegen, erhält der Rest den zuletzt eingestellten Wert:

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

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie das LIKE-Schlüsselwort

Mit LIKE Sie die Definition Ihrer Variablen auf einer anderen Variablen oder einem Feld in einer Datenbank oder einer temporären Tabelle basieren.

Definieren einer Variablen LIKE ein Datenbankfeld erfordert, dass die Datenbank immer verbunden ist. Dies ist möglicherweise nicht immer das, was Sie möchten.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow