4D v16.3

Messages d'erreurs

Accueil

 
4D v16.3
Messages d'erreurs

Messages d'erreurs  


 

 

Cette section détaille les principaux messages délivrés par le compilateur. Ces messages sont de plusieurs types :

  • les warnings, qui vous aident à déjouer des pièges facilement évitables ;
  • les erreurs, qu'il vous appartient de corriger ;
  • les messages de contrôle d’exécution, délivrés dans 4D.

Ces messages sont délivrés tout au long du processus de compilation. Chaque message est accompagné ici d’un exemple de ce qui a pu le provoquer et, éventuellement, d’une explication supplémentaire.

Utilisation de pointeur(s) comme paramètre(s) de COPY ARRAY

 COPY ARRAY(LePointeur->;LeTableau)

Utilisation de pointeur(s) comme paramètre(s) de SELECTION TO ARRAY

 SELECTION TO ARRAY(LePointeur->;LeTableau)
 SELECTION TO ARRAY([LaTable]LeChamp;LePointeur->)

Utilisation de pointeur(s) comme paramètre(s) de ARRAY TO SELECTION

 ARRAY TO SELECTION(LePointeur->;[LaTable]LeChamp)

Utilisation de pointeur(s) comme paramètre(s) de LIST TO ARRAY

 LIST TO ARRAY(Enum;LePointeur->)</gen9>

Utilisation de pointeur(s) comme paramètre(s) de ARRAY TO LIST

 ARRAY TO LIST(LePointeur->;Enum)

Utilisation de pointeur(s) dans une déclaration de tableau

 ARRAY REAL(LePointeur->;5)

L’instruction ARRAY REAL(LeTableau;LePointeur->) ne provoquera pas cet avertissement. La valeur de la dimension d’un tableau n’a pas d’influence sur son type.

Utilisation de pointeur(s) comme paramètre(s) de DISTINCT VALUES

 DISTINCT VALUES(LePointeur->;LeTableau)

Utilisation de la fonction Undefined

 If(Undefined(LaVariable))

Cette méthode est protégée par un mot de passe.

Le Formulaire LeFormulaire contient un bouton avec action sans nom dans la page 1.
Tous vos boutons avec action doivent avoir un nom afin d’éviter des conflits.

Le pointeur utilisé dans cette commande doit pointer sur un Alphanumérique.

 LePointeur->≤2≥:="a"

Le pointeur utilisé dans cette commande doit pointer sur un Entier, un Entier long ou un NumériqueLaChaine≤LePointeur->≥:="a"

Un indice de tableau doit être Entier, Entier long ou Numérique.

 ALERT(LeTableau{LePointeur->})

Il manque un paramètre à l’appel de la commande du plug-in.

 WR SET FONT(LaZone)

Note : Il est possible de désactiver et d'activer individuellement des warnings avec les balises suivantes :
//%W-numero_de_warning pour désactiver un warning
//%W+numero_de_warning pour activer un warning
Ces activations et désactivations sont effectives pour tout le code analysé dans la suite du plan de compilation. Si on veut désactiver ou activer un warning de manière globale, il suffit d'insérer la balise idoine dans une méthode nommée "Compiler_xxx" car ces méthodes sont analysées en premier par le compilateur. Par exemple, pour désactiver le warning "Utilisation de pointeur(s) comme paramètre(s) de COPIER TABLEAU", il suffit d'insérer la balise "//%W-518.1" à l'endroit désiré.

Ces messages vous sont délivrés tout au long du processus de compilation. Il vous appartient de corriger ces erreurs afin de permettre au compilateur de générer une base compilée. Chaque message est accompagné ici d’un exemple de ce qui a pu le provoquer et éventuellement, d’une explication supplémentaire.

Typage

Cet opérateur ne peut s’appliquer à ce type de variable. Cette affectation provoquerait un conflit de type.

 LeRéel:=12,3
 LeBooléen:=True
 LeRéel:=LeBooléen

Changement du nombre de dimensions d'un tableau.

 ARRAY TEXT(LeTableau;5;5)
 ARRAY TEXT(LeTableau;5)

Conflit de type sur la variable LeTableau dans le formulaire LeFormulaire.

 ARRAY INTEGER(LeTableau)

Déclaration d'un tableau sans indice.

 ARRAY INTEGER(LeTableau)

Il manque une variable.

 COPY ARRAY(LeTableau;"")

Impossible de déterminer le type de LaVariable. Cette variable est utilisée dans la méthode M1.
Le type de LaVariable n’a pu être déterminé. Une directive de compilation est nécessaire.

Type de constante invalide

 OK:="Il fait beau"

La méthode M1 est inconnue.
La ligne contient un appel à une méthode qui n’existe pas ou plus.

Le champ utilisé dans cette expression provoque un conflit de type.

 MaDate:=Add to date(LeChampBool;1;1;1)

La variable LaVariable n'est pas une méthode.

 LaVariable(1)

La variable LaVariable n'est pas un tableau.

 LaVariable{5}:=12

Le résultat de la fonction est incompatible avec l'expression.

 LeTexte:="Numéro"+Num(i)

Les types utilisés dans l’expression sont incompatibles.

 LEntier:=LaDate*LeTexte

Utilisation de la variable $i de type alphanumérique comme variable de type réel.

 $i:="3"
 $($i):=5

L'indice du tableau n'est pas numérique.

 TabEntier{"3"}:=4

Retypage de la variable LaVariable du type Texte en tableau de type Texte.

 C_TEXT(LaVariable)
 COPY ARRAY(TabTexte;LaVariable)

Retypage de la variable LaVariable du type Texte en type Réel.

 LaVariable:=Num(LaVariable)

Retypage du tableau LeBooléen du type Booléen en variable de type Réel.

 LaVariable:=LeBooléen

Retypage du tableau du type Entier en type tableau de type Texte.

 ARRAY TEXT(TabEntier;12)

si TabEntier a été déclaré ailleurs comme tableau d'Entiers.

Seuls les pointeurs peuvent être suivis du signe ->

 LaVariable->:=5

si LaVariable n’est pas de type Pointeur.

Utilisation de la variable LaVar1 de type Texte comme une variable de type Numérique.

 LaVar1:=3,5

Utilisation d'un champ de type incorrect. [LaTable]LeChamp est un champ de type Date.

LaVariable est de type Numérique.

 LaVariable:=[LaTable]LeChamp

Syntaxe

Cette fonction ne retourne pas un pointeur.

 LaVariable:=Num("Il fait beau")->

Il n’est pas possible de dépointer cette fonction.

Erreur de syntaxe.

 If(LeBooléen)
 End for

Cette expression contient trop d'accolades ouvrantes ({).
La ligne comporte plus d'accolades ouvrantes que d’accolades fermantes.

Cette expression contient trop d'accolades fermantes (}).
La ligne comporte plus d'accolades fermantes que d’accolades ouvrantes.

Il manque une parenthèse fermante.
La ligne comporte plus de parenthèses ouvrantes que de fermantes.

Il manque une parenthèse ouvrante.
La ligne comporte plus de parenthèses fermantes que d’ouvrantes.

J'attendais un champ.

 If(Modified(LaVariable))

Il manque une accolade ouvrante.

 C_INTEGER($

J'attendais une variable.

 C_INTEGER([LaTable]LeChamp)

J'attendais un nombre constant.

 C_INTEGER(${"3"})

J'attendais un point virgule.

 COPY ARRAY(LeTableau1 LeTableau2)


Cette expression contient trop d'indices de chaîne ouvrants (MacOS).
 LaChaine≤3:="a"

Cette expression contient trop d'indices de chaîne fermants (MacOS).

 LaChaine3≥:="a"


Cette expression contient trop d'indices de chaîne ouvrants (Windows).
 LaChaine[[3:="a"

Cette expression contient trop d'indices de chaîne fermants (Windows).

 LaChaine 3]]:="a"

Je n’attendais pas un champ de type sous-table

 ARRAY TO SELECTION(LeTableau;Soustable)

Le type du paramètre de SI doit être booléen.

 If(LePointeur)

L’expression est trop complexe.
Divisez votre ligne en plusieurs sous-opérations.

Méthode trop complexe.
Trop d'imbrications de Au cas ou...Fin de cas et de Si…Fin de si.

Référence à un champ inconnu.
Votre méthode, probablement copiée d’une autre base, contient •???• à la place d’un nom de champ.

Référence à une table inconnue.
Votre méthode, probablement copiée d’une autre base, contient •???• à la place d’un nom de table.

Un pointeur ne peut être défini sur cette expression.

 LePointeur:=->LaVariable+3

Utilisation incorrecte des indices de chaînes de caractères.

 LeNumérique≤3≥ou LeNumérique[[3]]

ou bien

 LaChaine≤LaVariable≥ou LaChaine[[LaVariable]]

où LaVariable n’est pas une variable Numérique.

Paramètres

Ce résultat de fonction ne peut pas être paramètre de cette méthode.

 LaMéthode(Num(LaChaine))

si LaMéthode attend un paramètre de type Booléen.

Cette routine reçoit trop de paramètres

 DEFAULT TABLE(LaTable;LeFormulaire)

Cette valeur ne peut pas être paramètre de cette méthode.

 LaMéthode(3+2)

si LaMéthode attend un paramètre de type Booléen.

Conflit de type sur la variable $0.

 C_INTEGER($0)
 $0:=False

Conflit de type sur le paramètre générique.

 C_INTEGER(${3})
 For($i;3;5)
    ${$i}:=String($i)
 End for

La routine n'attend pas de paramètre.

 SHOW TOOL BAR(MaVar)

La routine nécessite au moins un paramètre.

 DEFAULT TABLE

La variable LaChaine ne peut pas être paramètre de cette méthode.

 LaMéthode(LaChaine)

si LaMéthode attend un paramètre de type Booléen.

Le type du paramètre $1 dans la méthode est différent de celui du paramètre à l'appel.

 Calcul("3+2")

avec la directive _o_C_INTEGER($1) dans Calcul.

Le type du paramètre passé ne correspond pas au type du paramètre attendu.

 Impri("LaserWriter")

si dans la méthode Impri, $1 est de type Numérique.

L’un des paramètres de COPIER TABLEAU est une variable.

 COPY ARRAY(LaVariable;LeTableau)

Retypage du paramètre $1 du type réel en type Texte.

 $1:=String($1)

Un paramètre ne peut être un tableau.

 RéInit(LeTableau)

Pour passer un tableau à une méthode, il faut passer un pointeur sur ce tableau.

Un paramètre ne peut être utilisé dans l'appel de cette routine.

 RECEIVE VARIABLE($1)

Utilisation du paramètre $1 de type Booléen comme une variable de type Entier.

 GET FIELD PROPERTIES(NoDeTable;NoDeChamp;Type;$1)

Opérateurs

Cet opérateur ne peut s'appliquer à ce type de variable.

 LeBool2:=LeBool1+True

L’addition ne peut pas s’appliquer à des Booléens.

Je n'attendais pas l'opérateur >

 QUERY(LaTable;[LaTable]LeChamp=0;>)

Les deux opérandes ne sont pas comparables.

 If(LeLongE=Image2)

Le signe moins ne peut pas être utilisé dans cette expression.

 LeBool:=-False

Plug-ins

La commande PExt du plug-in est mal définie.

Il manque des paramètres à l’appel de la commande du plug-in.

Le nombre de paramètres envoyés à la commande du plug-in est trop grand.

La commande LaVariable du plug-in est mal définie.

Erreurs générales

Deux méthodes portent le même nom : LeNom.
Pour pouvoir compiler votre base, il faut que toutes les méthodes projets aient des noms différents.

Erreur interne n° xx.
Au cas où ce message apparaîtrait dans l’une de vos bases, téléphonez au support technique de 4D et signalez le numéro de l’erreur.

Je n'ai pas pu déterminer le type de LaVariable. Cette variable est utilisée dans la méthode M1.
Le type de LaVariable n’a pu être déterminé. Une directive de compilation est nécessaire.

La méthode originale est endommagée.
La méthode est endommagée dans la structure originale. Supprimez-la ou remplacez-la.

Méthode 4D inconnue.
La méthode est endommagée.

Retypage de la variable LaVariable dans le Formulaire LeFormulaire.
Ce message apparaîtra si vous donnez, par exemple, le nom OK à une variable de type Graphe dans un formulaire.

Une fonction et une variable portent le même nom : LeNom.
Renommez soit la fonction, soit la variable.

Une variable dessinée dans le Formulaire LeFormulaire a le même nom qu'une fonction : LeNom.
Renommez soit la fonction, soit la variable.

Une méthode et une variable portent le même nom : LeNom.
Renommez soit la méthode, soit la variable.

Une commande du plug-in et une variable portent le même nom : LeNom.
Renommez soit la commande du plug-in, soit la variable.

Une commande qui n'est pas thread-safe ne peut pas être appelée par une méthode déclarée thread-safe.
Modifiez la méthode afin qu'elle devienne thread-safe (ne pas utiliser de commande non thread-safe) ou changez la propriété de déclaration de la méthode pour lancer un process coopératif

La méthode 'NomMethode' qui n'est pas thread-safe ne peut pas être appelée par une méthode déclarée thread-safe.
Modifiez la méthode afin qu'elle devienne thread-safe ou changez la propriété de déclaration de la méthode pour lancer un process coopératif

Ces messages sont délivrés dans 4D, lors de l’utilisation de la base compilée. Ils sont affichés dans 4D dans une fenêtre d'erreur spécifique.

Dépassement de capacité d'un tableau.
Si LeTableau est un tableau à 5 éléments à un instant donné, ce message apparaîtra si vous essayez d’accéder à l’élément LeTableau{17} à cet instant.

Division par zéro.

 Var1:=0
 Var2:=2
 Var3:=Var2/Var1

Le paramètre utilisé n'a pas été passé.
Utilisation de la variable $4 alors que seuls trois paramètres ont été passés lors de l’appel courant.

Le pointeur n'est pas correctement initialisé.

 LePointeur->:=5

si LePointeur n’a pas encore été initialisé.

La chaîne dans laquelle se fait l'affectation est trop courte.

 C_STRING(LaChaine1;5)
 C_STRING(LaChaine2;10)
 LaChaine2:="Bonjour"
 LaChaine1:=LaChaine2

L'indice de chaîne n'est pas valide (trop grand ou négatif).

 i:=-30
 LaChainei≥:=LaChaine2 ou LaChaine[[i]]:=LaChaine2

La chaîne passée en paramètre est vide ou non initialisée.

 LaChaine≤1≥:=""
 LaChaine[[1]]:=""

Modulo par zéro.

 Var1:=0
 Var2:=2
 Var3:=Var2% Var1

Paramètres incorrects dans une commande EXECUTER FORMULE.

 EXECUTE FORMULA("MaMéthode(MonAlpha)")

si MaMéthode attend un paramètre autre qu’alphanumérique.

Pointeur sur une variable inconnue du compilateur.

 LePointeur:=Get pointer("LaVariable")
 LePointeur:="MaChaîne"

si LaVariable n’apparaît pas explicitement dans la base.

Tentative de retypage par l’intermédiaire d’un pointeur.

 LeBooleen:=LePointeur->

si LePointeur référence un champ de type Entier.

Utilisation incorrecte d’un pointeur.

 LeCaractère:=LaChaine≤LePointeur->≥
 LeCaractère:=LaChaine[[LePointeur]]

si LePointeur ne référence pas un Numérique.



Voir aussi  

Conseils d’optimisation
Guide du typage
Précisions de syntaxe
Utilisation des directives de compilation

 
PROPRIÉTÉS 

Produit : 4D
Thème : Compilateur

 
HISTORIQUE 

 
MOTS-CLÉS 

warning

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)