Saltar para o conteúdo principal
Versão: 20 R7 BETA

Type

Type ( campVar ) -> Resultado

ParâmetroTipoDescrição
campVarField, VariableCampo ou Variável a ser testada
ResultadoIntegerNúmero de tipo de dados

Descrição

O comando Type devolve um valor numérico que indica o tipo do campo ou da variável que passa em campVar.

4D ofere as constantes pré-definidas abaixo encontradas no tema Tipos de campos e variáveis:

ConstanteTipoValor
Array 2DInteiro longo13
Blob arrayInteiro longo31
Boolean arrayInteiro longo22
Date arrayInteiro longo17
Integer arrayInteiro longo15
Is alpha fieldInteiro longo0
Is BLOBInteiro longo30
Is BooleanInteiro longo6
Is collectionInteiro longo42
Is dateInteiro longo4
Is integerInteiro longo8
Is integer 64 bitsInteiro longo25
Is longintInteiro longo9
Is nullInteiro longo255
Is objectInteiro longo38
Is pictureInteiro longo3
Is pointerInteiro longo23
Is realInteiro longo1
Is string varInteiro longo24
Is subtableInteiro longo7
Is textInteiro longo2
Is timeInteiro longo11
Is undefinedInteiro longo5
Is variantInteiro longo12
LongInt arrayInteiro longo16
Object arrayInteiro longo39
Picture arrayInteiro longo19
Pointer arrayInteiro longo20
Real arrayInteiro longo14
String arrayInteiro longo21
Text arrayInteiro longo18
Time arrayInteiro longo32

Se pode aplicar a função Type a campos, variáveis interprocesso, variáveis processo, variáveis locais e ponteiros sem referência para esses tipos de objetos. Pode aplicar Type aos parâmetros ($1, $2 ... ${...}) de um método de projeto ou ao resultado da função ($0).

Nota:

  • Não se pode aplicar a função Type a expressões escalares tais como propriedades de objeto (emp.name) ou itens coleção (myColl[5]). Para fazer isso, deve usar o comando Value type
  • Em modo compilado, chamar Type em um parâmetro método ($0, $1...) declarado como C_VARIANT não retorna Is variante sim o tipo de dados (mesma coisa que chamar Value type)

Exemplo 1

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:

  // Método de projeto APAGAR REGISTRO
  // APAGAR REGISTRO ( Ponteiro {; Inteiro longo } )
  // APAGAR REGISTRO ( -> [Tabela] { ; Tipo de valores } )
 var $1 : Pointer
 var $2;$vlTipoVal : Integer
 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)
             var $vgImagemVaxia : Picture
             $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:

  // Apagar todo o registro atual da tabela [Coisas a fazer]
 APAGAR REGISTRO(->[Coisas a fazer])
  // Apagar os campos de tipo Texto, BLOB e Imagem do registro atual da tabela [Coisas a fazer]
 APAGAR REGISTRO(->[Coisas a fazer];0?+Is text?+Is BLOB?+Is picture)
  // Apagar a totalidade do registro atual da tabela [Coisas a fazer] exceto os campos Alfa
 APAGAR REGISTRO(->[Coisas a fazer];-1?-Is alpha field)

Exemplo 2

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} // É meuArr{6} a fila de um array 2D?
 RESOLVE POINTER(ptrmeuArr;varNome;numTabela;numCamp)
 If(varNome#"")
    $ptr:=Get pointer(varNome)
    $eltipo:=Type($ptr->)
  // Se meuArr{6} é uma fila de um array 2D, $otipo é igual a 13
 End if

Exemplo 3

Ver exemplo do comando APPEND DATA TO PASTEBOARD.

Ver também

Is a variable
Undefined
Value type