version 11 (Modified)
Type (fieldVar) 数値
| 引数 | 型 | 説明 | |
| fieldVar | フィールド | 変数 | テストするフィールドまたは変数 | |
| 戻り値 | 数値 | データタイプ番号 |
説明
Type コマンドは、fieldVarで渡したフィールドや変数のタイプを示す数値を返します。
4Dは、以下のような定義済み定数を持っています:
| 定数 | 型 | 値 |
| Is Alpha Field | 倍長整数 | 0 |
| Is String Var | 倍長整数 | 24 |
| Is Text | 倍長整数 | 2 |
| Is Real | 倍長整数 | 1 |
| Is Float | 倍長整数 | 35 |
| Is Integer | 倍長整数 | 8 |
| Is Longint | 倍長整数 | 9 |
| Is Integer 64 bits | 倍長整数 | 25 |
| Is Date | 倍長整数 | 4 |
| Is Time | 倍長整数 | 11 |
| Is Boolean | 倍長整数 | 6 |
| Is Picture | 倍長整数 | 3 |
| Is Subtable | 倍長整数 | 7 |
| Is BLOB | 倍長整数 | 30 |
| Is Undefined | 倍長整数 | 5 |
| Is Pointer | 倍長整数 | 23 |
| String Array | 倍長整数 | 21 |
| Text Array | 倍長整数 | 18 |
| Real Array | 倍長整数 | 14 |
| Integer Array | 倍長整数 | 15 |
| Longint Array | 倍長整数 | 16 |
| Date Array | 倍長整数 | 17 |
| Boolean Array | 倍長整数 | 22 |
| Picture Array | 倍長整数 | 19 |
| Pointer Array | 倍長整数 | 20 |
| Array 2D | 倍長整数 | 13 |
Notes:
・Type はグラフ変数に適用されると 9 (Is Longint) を返します。
・4D v11より、Type が2次元配列の行に適用されると、実際の配列の型を返すようになりました。以前はArray 2D が返されました (例題 4参照)。
Type をフィールド、インタープロセス変数、プロセス変数、ローカル変数、そしてこれらのオブジェクトタイプを参照するポインタの逆参照に適用することができます。Type を引数 ($1,$2..., ${...}) やプロジェクトメソッド、戻り値 ($0)に使用できます。
例題
1. APPEND DATA TO PASTEBOARD コマンドの例題参照
2. DRAG AND DROP PROPERTIES コマンドの例題参照
3. 以下のプロジェクトメソッドは、テーブルのカレントレコードのフィールドの一部あるいはすべてをクリアします。テーブルは、ポインタ引数として渡されます。カレントレコードの削除や変更は行いません
` EMPTY RECORD Project Method
` EMPTY RECORD ( Pointer {; Long } )
` EMPTY RECORD ( -> [table] { ; type Flags } )
C_POINTER ($1)
C_LONGINT ($2;$vlTypeFlags)
If (Count parameters>=2)
$vlTypeFlags:=$2
Else
$vlTypeFlags:=0xFFFFFFFF
End if
For ($vlField;1;Get last field number($1))
$vpField:=Field(Table($1);$vlField)
$vlFieldType:=Type($vpField->)
If ( $vlTypeFlags ?? $vlFieldType )
Case of
: (($vlFieldType=Is Alpha Field)|($vlFieldType=Is Text))
$vpField->:=""
: (($vlFieldType=Is Real)|($vlFieldType=Is Integer)|($vlFieldType=Is Longint))
$vpField->:=0
: ($vlFieldType=Is Date)
$vpField->:=!00/00/00!
: ($vlFieldType=Is Time)
$vpField->:=?00:00:00?
: ($vlFieldType=Is Boolean)
$vpField->:=False
: ($vlFieldType=Is Picture)
C_PICTURE($vgEmptyPicture)
$vpField->:=$vgEmptyPicture
: ($vlFieldType=Is Subtable)
Repeat
ALL SUBRECORDS($vpField->)
DELETE SUBRECORD($vpField->)
Until(Records in subselection($vpField->)=0)
: ($vlFieldType=Is BLOB)
SET BLOB SIZE($vpField->;0)
End case
End if
End for
このプロジェクトメソッドをデータベースに作成後、以下のように使用できます:
` ーブル [Things To Do]のカレントレコードを空にする EMPTY RECORD (->[Things To Do]) ` ーブル [Things To Do]のカレントレコードのキスト, BLOB, ピクチャを空にする EMPTY RECORD (->[Things To Do]; 0 ?+ Is Text ?+ Is BLOB ?+ Is Picture ) ` ーブル [Things To Do] のカレントレコードの文字フィールド以外を空にする EMPTY RECORD (->[Things To Do]; -1 ?- Is Alpha Field)
4. 汎用コードを書くなど特別なケースで、配列が標準の配列か、2次元配列の行かを知りたい場合があるとします。以下のように書くことができます:
ptrmyArr:=->myArr{6} ` myArr{6} 2D 配列か?
RESOLVE POINTER(ptrmyArr;varName;tableNum;fieldNum)
If(varName#"")
$ptr:=Get pointer(varName)
$thetype:=Type($ptr->)
` myArr{6} が2次元配列の行なら$thetype は 13になる
End if
参照