O comando Type devolve um valor numérico que indica o tipo do campo ou da variável que passa em campVar.
4D oferece as seguintes constantes pré-definidas:
Constante |
Tipo |
Valor |
Is alpha field |
Inteiro longo |
0 |
Is real |
Inteiro longo |
1 |
Is text |
Inteiro longo |
2 |
Is picture |
Inteiro longo |
3 |
Is date |
Inteiro longo |
4 |
Is undefined |
Inteiro longo |
5 |
Is Boolean |
Inteiro longo |
6 |
Is subtable |
Inteiro longo |
7 |
Is integer |
Inteiro longo |
8 |
Is longint |
Inteiro longo |
9 |
Is time |
Inteiro longo |
11 |
Array 2D |
Inteiro longo |
13 |
Real array |
Inteiro longo |
14 |
Integer array |
Inteiro longo |
15 |
LongInt array |
Inteiro longo |
16 |
Date array |
Inteiro longo |
17 |
Text array |
Inteiro longo |
18 |
Picture array |
Inteiro longo |
19 |
Pointer array |
Inteiro longo |
20 |
String array |
Inteiro longo |
21 |
Boolean array |
Inteiro longo |
22 |
Is pointer |
Inteiro longo |
23 |
Is string var |
Inteiro longo |
24 |
Is integer 64 bits |
Inteiro longo |
25 |
Is BLOB |
Inteiro longo |
30 |
Blob array |
Inteiro longo |
31 |
Time array |
Inteiro longo |
32 |
Is float |
Inteiro longo |
35 |
Is object |
Inteiro longo |
38 |
Object array |
Inteiro longo |
39 |
Is JSON null |
Inteiro longo |
255 |
Notas:
• Type devolve 9 (Is LongInt) quando se aplica a uma variável de tipo gráfico.
• A partir da versão 11 de 4D, Type devolve o tipo atual de um array quando é aplicado a uma "fila" de um array 2D, ao invés de um Array 2D como antes (ver exemplo 4).
• A partir da versão 11 de 4D, Type devolve o tipo (Is text ou Text array quando se aplica respectivamente a uma variável Alfa ou a um array Alfa (a partir desta versão, não há diferença entre uma variável Alfa e Texto).
Pode aplicar
Type a campos, variáveis interprocesso, variáveis processo, variáveis locais e aos apontadores sem referência que referenciam estes tipos de objetos. Pode aplicar
Type aos parâmetros ($1,$2..., ${...}), de um método de projeto ou a um resultado de uma função ($0).
Ver exemplo do comando DRAG AND DROP PROPERTIES.
O método de projeto a seguir apaga uma parte ou a totalidade dos campos do registro atual da tabela a qual aponta o ponteiro passado como parâmetro. Faz isto sem apagar ou modificar o registro atual:
C_POINTER($1)
C_LONGINT($2;$vlTipoVal)
If(Count parameters>=2)
$vlTipoVal:=$2
Else
$vlTipoVal:=0xFFFFFFFF
End if
For($vlCampo;1;Count fields($1))
$vpCampo:=Field(Table($1);$vlCampo)
$vlTipoCampo:=Type($vpCampo->)
If($vlTipoVal??$vlTipoCampo )
Case of
:(($vlTipoCampo =Is alpha field)|($vlTipoCampo =Is text))
$vpCampo->:=""
:(($vlTipoCampo =Is real)|($vlTipoCampo=Is integer)|($vlTipoCampo =Is longint))
$vpCampo->:=0
:($vlTipoCampo =Is date)
$vpCampo->:=!00/00/00!
:($vlTipoCampo =Is time)
$vpCampo->:=?00:00:00?
:($vlTipoCampo =Is Boolean)
$vpCampo->:=False
:($vlTipoCampo =Is picture)
C_PICTURE($vgImagemVaxia)
$vpCampo->:=$vgImagemVazia
:($vlTipoCampo =Is subtable)
Repeat
ALL SUBRECORDS($vpCampo->)
DELETE SUBRECORD($vpCampo->)
Until(Records in subselection($vpCampo->)=0)
:($vlTipoCampo =Is BLOB)
SET BLOB SIZE($vpCampo->;0)
End case
End if
End for
Depois de implementar este método de projeto em seu banco de dados, pode escrever:
Em alguns casos, por exemplo quando se escreve código genérico, pode necessitar saber se um array é um array normal independente ou uma "fila" de um array 2D. Neste caso, pode utilizar o código a seguir:
ptrmeuArr:=->meuArr{6}
RESOLVE POINTER(ptrmeuArr;varNome;numTabela;numCamp)
If(varNome#"")
$ptr:=Get pointer(varNome)
$eltipo:=Type($ptr->)
End if