サーチ…


前書き

進捗状況ABLは静的に入力されます。変数は宣言する必要があり、実行時にデータ型を変更することはできません。

構文

  • INT64 INITIAL -200 NO-UNDOと同様に変数を定義します。 // -200に初期化された64ビット整数

  • 論理的にNO-UNDOを定義する。 // lという名前の論理変数

  • VARIABLE(可変)を定義する。大文字と小文字を区別しない。 //大文字小文字を区別する( 'a' <> 'A')変数。

  • 今日の日付を現在の日付に戻すことはできません。 // todays dateに設定された日付変数。

  • AS文字の範囲を変更する5 NO-UNDO。 //長さが5の文字配列

  • INTEGER EXTENT NO-UNDOの範囲内で変数を定義します。 //設定された長さのないエクステント

  • DEFINE VARIABLE b 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.

配列 - 定義とアクセス

プログレスは1次元配列をサポートしますが、 EXTENTSと呼ばれ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.

3行目で次のエラーが発生します。 ここに画像の説明を入力

DEFINE VARIABLEステートメントで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.

結果:

ここに画像の説明を入力

すべてのエクステントを設定しない場合、残りの設定は最後に設定された値になります。

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

結果:

ここに画像の説明を入力

LIKEキーワードの使用

LIKEを使用すると、変数の定義をデータベースまたは一時表の別の変数またはフィールドに基づいて設定することができます。

変数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