ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com

ホーム

 
4D v20 R7
Type

Type 


 

Type ( fieldVar ) -> 戻り値 
引数   説明
fieldVar  フィールド, 変数 in テストするフィールドまたは変数
戻り値  倍長整数 in データタイプ番号

説明   

Type コマンドは、fieldVar 引数に渡したフィールドまたは変数の型を示す数値を返します。

4Dは、Field and Variable Types テーマ内に以下のような定義済み定数を持っています:

定数
Array 2D 倍長整数 13
Blob array 倍長整数 31
Boolean array 倍長整数 22
Date array 倍長整数 17
Integer array 倍長整数 15
Is alpha field 倍長整数 0
Is BLOB 倍長整数 30
Is Boolean 倍長整数 6
Is collection 倍長整数 42
Is date 倍長整数 4
Is integer 倍長整数 8
Is integer 64 bits 倍長整数 25
Is longint 倍長整数 9
Is null 倍長整数 255
Is object 倍長整数 38
Is picture 倍長整数 3
Is pointer 倍長整数 23
Is real 倍長整数 1
Is string var 倍長整数 24
Is subtable 倍長整数 7
Is text 倍長整数 2
Is time 倍長整数 11
Is undefined 倍長整数 5
Is variant 倍長整数 12
LongInt array 倍長整数 16
Object array 倍長整数 39
Picture array 倍長整数 19
Pointer array 倍長整数 20
Real array 倍長整数 14
String array 倍長整数 21
Text array 倍長整数 18
Time array 倍長整数 32

Type ファンクションはフィールド、インタープロセス変数、プロセス変数、ローカル変数、そしてこれらのタイプのオブジェクトの逆参照されているポインターに対して適用可能です。Type は、プロジェクトメソッドの引数($1, $2 ... ${...})、あるいは関数の戻り値($0)に対しても適用可能です。

注: 

  • Type ファンクションは、オブジェクトプロパティ(emp.name) やコレクション要素(myColl[5]) などのスカラー式に対して適用することができません。これには、Value type コマンドを使用する必要があります。
  • コンパイル済みモードでは、_O_C_VARIANT として宣言されたメソッド引数($0, $1...) に対してType を呼び出した場合、Is variant は返されず、実際のデータ型が返されます(Value type を呼んだ場合と同じ)

以下のプロジェクトメソッドは、テーブルのカレントレコードのフィールドの一部あるいはすべてをクリアします。テーブルは、ポインタ引数として渡されます。カレントレコードの削除や変更は行いません

  ` 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)

汎用コードを書くなど特別なケースで、配列が標準の配列か、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

APPEND DATA TO PASTEBOARD コマンドの例題参照



参照 

Is a variable
Undefined
Value type

 
プロパティ 

プロダクト: 4D
テーマ: ランゲージ
番号: 295

This command can be run in preemptive processes

 
ページの目次 
 
履歴 

変更: 4D v11 SQL

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v20 R7)