Aller au contenu principal
Version: Next

Type

Type ( champVar ) -> Résultat

ParamètreTypeDescription
champVarChamp, Variable🡒Champ ou variable à tester
RésultatEntier long🡐Numéro du type de données

Description

Type retourne une valeur numérique qui indique le type du champ ou de la variable que vous avez passé(e) dans le paramètre champVar.

4D fournit les constantes prédéfinies suivantes, disponible dans le thème Types champs et variables :

ConstanteTypeValeur
Array 2DEntier long13
Blob arrayEntier long31
Boolean arrayEntier long22
Date arrayEntier long17
Integer arrayEntier long15
Is alpha fieldEntier long0
Is BLOBEntier long30
Is BooleanEntier long6
Is collectionEntier long42
Is dateEntier long4
Is integerEntier long8
Is integer 64 bitsEntier long25
Is longintEntier long9
Is nullEntier long255
Is objectEntier long38
Is pictureEntier long3
Is pointerEntier long23
Is realEntier long1
Is string varEntier long24
Is subtableEntier long7
Is textEntier long2
Is timeEntier long11
Is undefinedEntier long5
Is variantEntier long12
LongInt arrayEntier long16
Object arrayEntier long39
Picture arrayEntier long19
Pointer arrayEntier long20
Real arrayEntier long14
String arrayEntier long21
Text arrayEntier long18
Time arrayEntier long32

Vous pouvez appliquer la fonction Type aux champs, variables interprocess, variables process, variables locales et à des pointeurs dépointés qui référencent ces types d'objets. Vous pouvez appliquer Type aux paramètres ($1,$2..., ${...}) d'une méthode projet ou au résultat d'une fonction ($0).

Notes :

  • Vous ne pouvez pas appliquer la fonction Type aux expressions scalaires telles que les propriétés d'objets (emp.name) ou les éléments de collections (maColl[5]). Pour cela, vous devez utiliser la commande Value type.
  • En mode compilé, si vous appelez la commande Type pour un paramètre de méthode ($0, $1...) déclaré comme C_VARIANT, cela ne retournera pas Is variant mais plutôt le type de données courantes (de même si vous appelez la commande Value type).

Exemple 1

La méthode projet suivante efface une partie ou la totalité des champs de l'enregistrement courant de la table vers laquelle pointe le pointeur passé en paramètre, et ce, sans supprimer l'enregistrement ou changer d'enregistrement courant :

  // Méthode projet VIDER ENREGISTREMENT
  // VIDER ENREGISTREMENT ( Pointeur {; Entier long } )
  // VIDER ENREGISTREMENT ( -> [Table] { ; Type des valeurs } )
 
 var $1 : Pointer
 var $2;$vlTypeVal : Integer
 
 If(Count parameters>=2)
    $vlTypeVal:=$2
 Else
    $vlTypeVal:=0xFFFFFFFF
 End if
 For($vlChamp;1;Nombre de champs($1))
    $vpChamp:=Field(Table($1);$vlChamp)
    $vlTypeChamp:=Type($vpChamp->)
    If($vlTypeVal ??$vlTypeChamp )
       Case of
          :(($vlTypeChamp=Is alpha field)|($vlTypeChamp=Is text))
             $vpChamp->:=""
          :(($vlTypeChamp=Is real)|($vlTypeChamp=Is integer)|($vlTypeChamp=Is longint))
             $vpChamp->:=0
          :($vlTypeChamp=Is date)
             $vpChamp->:=!00/00/00!
          :($vlTypeChamp=Is time)
             $vpChamp->:=?00:00:00?
          :($vlTypeChamp=Is Boolean)
             $vpChamp->:=False
          :($vlTypeChamp=Is picture)
             var $vgImageVide : Picture
             $vpChamp->:=$vgImageVide
          :($vlTypeChamp=Is subtable)
             Repeat
                ALL SUBRECORDS($vpChamp->)
                DELETE SUBRECORD($vpChamp->)
             Until(Records in subselection($vpChamp->)=0)
          :($vlTypeChamp=Is BLOB)
             SET BLOB SIZE($vpChamp->;0)
       End case
    End if
 End for

Une fois cette méthode projet implémentée dans votre base, vous pouvez écrire :

  // Effacer la totalité du contenu de l'enregistrement courant de la table [Choses à faire]
 VIDER ENREGISTREMENT(->[Choses à faire])
 
  // Effacer les champs de type Texte, BLOB et Image de l'enregistrement courant de la table [Choses à faire]
 VIDER ENREGISTREMENT(->[Choses à faire];0?+Is text?+Is BLOB?+Is picture)
 
  // Effacer la totalité de l'enregistrement courant de la table [Choses à faire] sauf les champs Alpha
 VIDER ENREGISTREMENT(->[Choses à faire];-1?-Is alpha field)

Exemple 2

Dans certains cas, par exemple pour écrire du code générique, il peut être nécessaire de savoir si un tableau est tableau standard indépendant ou une “ligne” d’un tableau 2D. Dans ce cas, il suffit d’utiliser le code suivant :

 ptrmonTab:=->monTab{6} // monTab{6} est-il une ligne d’un tableau 2D ?
 RESOLVE POINTER(ptrmonTab;nomVar;numTable;numChamp)
 If(nomVar#"")
    $ptr:=Get pointer(nomVar)
    $letype:=Type($ptr->)
  // Si monTab{6} est une ligne de tableau 2D, $letype vaut 13
 End if

Exemple 3

Référez-vous à l'exemple de la commande APPEND DATA TO PASTEBOARD.

Voir aussi

Is a variable
Undefined
Value type