Saltar al contenido principal
Versión: Siguiente

Type

Type ( campoVar ) -> Resultado

ParámetroTipoDescripción
campoVarCampo, Variable🡒Campo o variable a probar
ResultadoEntero largo🡐Número de tipo de datos

Descripción

El comando Type devuelve un valor numérico que indica el tipo de campo o variable que pasa en el parámetro campoVar.
4D ofrece las siguientes constantes predefinidas que se encuentran en el tema Tipos de campos y variables:

ConstanteTipoValor
Array 2DEntero largo13
Blob arrayEntero largo31
Boolean arrayEntero largo22
Date arrayEntero largo17
Integer arrayEntero largo15
Is alpha fieldEntero largo0
Is BLOBEntero largo30
Is BooleanEntero largo6
Is collectionEntero largo42
Is dateEntero largo4
Is integerEntero largo8
Is integer 64 bitsEntero largo25
Is longintEntero largo9
Is nullEntero largo255
Is objectEntero largo38
Is pictureEntero largo3
Is pointerEntero largo23
Is realEntero largo1
Is string varEntero largo24
Is subtableEntero largo7
Is textEntero largo2
Is timeEntero largo11
Is undefinedEntero largo5
Is variantEntero largo12
LongInt arrayEntero largo16
Object arrayEntero largo39
Picture arrayEntero largo19
Pointer arrayEntero largo20
Real arrayEntero largo14
String arrayEntero largo21
Text arrayEntero largo18
Time arrayEntero largo32

Puede aplicar la función Type a los campos, variables interproceso, variables proceso, variables locales y punteros desreferenciados para estos tipos de objetos. Puede aplicar Type a los parámetros ($1, $2 ... ${...}) de un método proyecto o a un resultado de una función ($0).

Notas:

  • Puede aplicar la función Type a las expresiones escalares como propiedades de objeto (emp.name) o los elementos de colecciones (myColl[5]). Para ello, debe utilizar el comando Value type.
  • En modo compilado, llamar Type en un parámetro método ($0, $1...) declarado como C_VARIANT no devuelve Is variant sino el tipo de datos real (igual que llamar a Value type).

Ejemplo 1

El siguiente método de proyecto borra una parte o la totalidad de los campos del registro actual de la tabla a la cual apunta el puntero pasado como parámetro. Hace esto sin borrar o cambiar el registro actual:

  // Método de proyecto BORRAR REGISTRO
  // BORRAR REGISTRO ( Puntero {; Entero largo } )
  // BORRAR REGISTRO ( -> [Tabla] { ; 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 $vgImagenVacia : Picture
             $vpCampo->:=$vgImagenVacia
          :($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

Después de implementar este método de proyecto en su base de datos, puede escribir:

  // Borrar todo el registro actual de la tabla [Cosas por hacer]
 BORRAR REGISTRO(->[Cosas por hacer])
  // Borrar los campos de tipo Texto, BLOB e Imagen del registro actual de la tabla [Cosas por hacer]
 BORRAR REGISTRO(->[Cosas por hacer];0?+Is text?+Is BLOB?+Is picture)
  // Borrar la totalidad del registro actual de la tabla [Cosas por hacer] excepto los campos Alfa
 BORRAR REGISTRO(->[Cosas por hacer];-1?-Is alpha field)

Ejemplo 2

En algunos casos, por ejemplo cuando se escribe código genérico, puede necesitar saber si un array es un array estándar independiente o una "fila" de un array 2D. En este caso, puede utilizar el siguiente código:

 ptrmiArr:=->miArr{6} // ¿Es miArr{6} la fila de un array 2D?
 RESOLVE POINTER(ptrmiArr;varNombre;numTabla;numCamp)
 If(varNombre#"")
    $ptr:=Get pointer(varNombre)
    $eltipo:=Type($ptr->)
  // Si miArr{6} es una fila de un array 2D, $eltipo es igual a 13
 End if

Ejemplo 3

Ver ejemplo del comando APPEND DATA TO PASTEBOARD.

Ver también

Is a variable
Undefined
Value type