4D v16.3

Fehlermeldungen

Home

 
4D v16.3
Fehlermeldungen

Fehlermeldungen  


 

 

Dieser Abschnitt beschreibt die vom Compiler generierten Meldungen. Es gibt folgende Arten:

  • Warnungen, die helfen, gängige Stolperquellen zu vermeiden
  • Fehler, die Sie selbst korrigieren müssen
  • Meldungen bei der Bereichsprüfung, die innerhalb 4D erstellt werden

Diese Meldungen werden während der Kompilierung erstellt. Die zugrunde liegenden Probleme werden im folgenden anhand von Beispielen erklärt.

Zeiger in COPY ARRAY

 COPY ARRAY(Pointer->;Array)

Zeiger in SELECTION TO ARRAY

 SELECTION TO ARRAY(Pointer->;MyArray)
 SELECTION TO ARRAY([MyTable]MyField;Pointer->)

Zeiger in ARRAY TO SELECTION

 ARRAY TO SELECTION(Pointer->;[MyTable]MyField)

Zeiger in LIST TO ARRAY

 LIST TO ARRAY(List;Pointer->)

Zeiger in ARRAY TO LIST

 ARRAY TO LIST(Pointer->;List)

Zeiger in Array-Deklaration

 ARRAY REAL(Pointer->;5)

Die Anweisung ARRAY REAL(Array;Pointer->) generiert nicht diese Warnung. Der Wert einer Dimension eines Array hat keinen Einfluss auf seinen Typ. In diesem Beispiel muss das Array, auf welches sich der Zeiger bezieht, an anderer Stelle definert worden sein.

Zeiger in DISTINCT VALUES

 DISTINCT VALUES(Pointer->;Array)

Die Verwendung der Funktion Undefined wird nicht empfohlen.

 If(Undefined(Variable))

Die Funktion Undefined gibt in einer kompilierten Datenbank immer FALSCH zurück.

Diese Methode ist mit einem Kennwort geschützt.

Eine Schaltfläche mit automatischer Aktion hat keinen Namen im Formular MyForm auf Seite X. Um Konflikte zu vermeiden, sollten alle Schaltflächen Namen haben.

Nimmt an, dass der Zeiger auf einen alphanumerischen Ausdruck zeigt.

 Pointer->≤2≥:="a"

Nimmt an, dass der Stringindex numerisch ist.

 StringPointer->≥:="a"

Nimmt an, dass der Arrayindex vom Typ Zahl ist.

 ALERT(MyArray{Pointer->})

Fehlender Parameter im Prozessaufruf des Plug-In.

 WR SET FONT(Area)

Hinweis:
Mit nachfolgende Tags können Sie Warnungen individuell aktivieren und deaktivieren:
//%W-warning_number, um eine Warnung zu deaktivieren.
//%W+warning_number, um eine Warnung zu aktivieren.
Warnungen auf diese Weise zu aktivieren bzw. deaktivieren, wirkt sich auf Code aus, der im Kompilierungsplan sukzessive durchlaufen wird. Wollen Sie Warnungen generell aktivieren bzw. deaktivieren, können Sie einfach das entsprechende Tag in eine Methode mit Namen "Compiler_xxx" einfügen. Diese Methoden werden vom Kompiler als erste durchlaufen. Um z.B. die Warnung "Zeiger in COPY ARRAY" zu deaktivieren, können Sie das Tag "//%W-518.1" an der entsprechenden Stelle einfügen.

Diese Meldungen werden während der Kompilierung generiert. Sie müssen die zugrundeliegenden Fehler korrigieren, damit der Compiler eine kompilierte Datenbank erstellen kann. Die Fehler werden im folgenden anhand von Beispielen erklärt.

Typisierung

Der Variablentyp ist mit dem Operator nicht kompatibel. Die Zuweisung mit diesen Typen ist nicht möglich.
 
 MyReal:=12.3
 MyBoolean:=True
 MyReal:=MyBoolean

Anzahl Dimensionen eines Array ändern

 ARRAY TEXT(MyArray;5;5)
 ARRAY TEXT(MyArray;5)

Typisierungskonflikt der Variablen MyArray im Formular.

 ARRAY INTEGER(MyArray)

Ein Array ohne Dimensionen deklarieren

 ARRAY INTEGER(MyArray)

Es wurde eine Variable erwartet.

 COPY ARRAY(MyArray;"")

Der Typ der Variablen ist unbekannt. Diese Variable wird in Methode M1 verwendet.
Der Variablentyp lässt sich nicht bestimmen. Eine Compiler Direktive ist notwendig.

Unbekannter Konstantentyp

 OK:="Das Wetter ist schön"

Die Methode M1 ist unbekannt.
Die Zeile ruft eine Methode auf, die es nicht bzw. nicht mehr gibt.

Inkorrekte Verwendung eines Feldes

 MyDate:=Add to date(BooleanField;1;1;1)

Die Länge eines Strings kann nicht mehr als 255 Zeichen betragen.

 C_STRING(325;MyString)

Die Variable VARIABLE ist keine Methode.

 Variable(1)

Die Variable VARIABLE ist kein Array.

 Variable{5}:=12

Das Ergebnis der Funktion ist mit diesem Ausdruck nicht kompatibel.

 Text:="Number"+Num(i)

Die in diesem Ausdruck verwendeten Variablentypen sind nicht kompatibel.

 Integer:=MyDate*Text

Änderung des Variablentyps $i vom Typ feste Länge in Zahl.

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

Index des Arrays ist keine Zahl.

 IntArray{"3"}:=4

Retypisierung der Variable Variable vom Typ Text zu Array Typ Text.

 C_TEXT(Variable)
 COPY ARRAY(TextArray;Variable)

Retypisierung der Variablen Variable vom Typ Text auf Typ Zahl.

 Variable:=Num(Variable)

Retypisierung des Array MyBoolean von Array Typ Boolean auf Variable Typ Zahl.

 Variable:=MyBoolean

Retypisierung des Array IntArray von Array Typ Ganzzahl auf Array Typ Text.

 ARRAY TEXT(IntArray;12)

wenn IntArray an anderer Stelle als Array vom Typ Ganzzahl deklariert wurde.

Versuch, eine Variable zu dereferenzieren, die nicht vom Typ Zeiger ist.

 Variable->:=5

Wenn die Variable nicht vom Typ Zeiger ist.

Retyisierung der Variablen Var1 vom Typ Text auf Typ Zahl.

 Var1:=3.5

Fehlerhafte Verwendung eines Feldes.

 Variable:=[MyTable]MyField

[MyTable]MyField ist ein Datenfeld. Die Variable ist numerisch.

Syntax

Das Ergebnis der Funktion ist kein Zeiger.
 Variable:=Num("Das Wetter ist schön")->

Diese Funktion lässt sich nicht dereferenzieren.

Syntaxfehler:

 If(Boolean)
 End for

Zu viele linke geschweifte Klammern ({).
Die Zeile enthält mehr öffnende als schließende geschweifte Klammern.

Zu viele rechte geschweifte Klammern (}).
Die Zeile enthält mehr schließende als öffnende geschweifte Klammern.

Klammer zu ) erwartet.
Die Zeile enthält mehr öffnende als schließende runde Klammern.

Klammer auf ( erwartet.
Die Zeile enthält mehr schließende als öffnende runde Klammern.

Es wurde ein Feld erwartet.

 If(Modified(Variable))

Eine linke runde Klammer wurde erwartet.

 C_INTEGER($

Es wurde eine Variable erwartet.

 C_INTEGER([MyTable]MyField)

Die Nummer einer Konstanten wurde erwartet.

 C_INTEGER(${"3"})

Ein Semicolon ; wurde erwartet.

 COPY ARRAY(Array1 Array2)


Mac OS
Zu viele öffnende Symbole für Zeichenreferenz.
 MyString≤3:="a"

Zu viele schließende Symbole für Zeichenreferenz.

 MyString3≥:="a"


Windows
Zu viele öffnende Symbole für Zeichenreferenz.
 MyString[[3:="a"

Zu viele schließende Symbole für Zeichenreferenz.

 MyString 3]]:="a"

Eine Untertabelle wurde nicht erwartet.

 ARRAY TO SELECTION(Array;Subtable)

Das Argument einer IF-Anweisung muss vom Typ Boolean sein.

 If(Pointer)

Der Ausdruck ist zu komplex.
Teilen Sie Ihre Anweisungen in mehrere kürzere Anweisungen auf.

Die Methode ist zu komplex.
Es gibt zuviele Anweisungen Case of...End case bzw. If…End if.

Unbekanntes Feld.
Ihre Methode wurde möglicherweise von einer anderen Datenbank kopiert und enthält •???• anstatt eines Feldnamens.

Unbekannte Tabelle.
Ihre Methode wurde möglicherweise von einer anderen Datenbank kopiert und enthält •???• anstatt des Tabellennamens.

Zeiger auf einen fehlerhaften Ausdruck.

 Pointer:=->Variable+3

Inkorrekte Verwendung des String Index.

 MyReal≤3≥or MyReal[[3]]

oder

 MyString≤Variable≥or MyString[[Variable]]

wobei Variable keine numerische Variable ist.

Parameter

Das Funktionsergebnis kann nicht als Parameter an diese Methode oder Befehl übergeben werden.
 MyMethod(Num(MyString))

wenn MyMethod einen Ausdruck vom Typ Boolean erwartet.

Es wurden dieser Methode zu viele Parameter übergeben.

 DEFAULT TABLE(Table;Form)

Dieser Wert kann nicht als Parameter an diese Methode oder Befehl übergeben werden.

 MyMethod(3+2)

wenn MyMethod einen Ausdruck vom Typ Boolean erwartet.

Konflikt beim Typ des Funktionsergebnis.

 C_INTEGER($0)
 $0:=False
 
Konflikt beim generischen Parametertyp

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

Dieser 4D Befehl benötigt keinen Parameter.

 SHOW TOOL BAR(MyVar)

Dieser 4D Befehl benötigt mindestens einen Parameter.

 DEFAULT TABLE
 
 
MyString kann in dieser Methode nicht als Parameter übergeben werden.
 <gen9>MyMethod(MyString)</gen9>

wenn MyMethod einen Parameter vom Typ Boolean erwartet.

Der Typ des Parameters $1 unterscheidet sich in der aufrufenden und aufgerufenen Methode.

 Calculate("3+2")

mit der Direktiven C_INTEGER($1) in Calculate.

Einer der Parameter in COPY ARRAY ist eine Variable.

 COPY ARRAY(Variable;Array)

Retypisierung der Variablen $1 von Typ Zahl auf Typ Text.

 $1:=String($1)

Ein Array kann nicht als Parameter verwendet werden.
ReInit(MyArray)Wollen Sie ein Array in einer Methode übergeben, müssen Sie einen Zeiger auf das Array übergeben.

Operatoren

Der Variablentyp ist nicht kompatibel mit dem Operator.
 Bool2:=Bool1+True

In Feldern vom Typ Boolean ist keine Addition möglich.

Der Operator > wurde nicht erwartet:
 QUERY(MyTable;[MyTable]MyField=0;>)

Variablen von diesem Typ sind nicht miteinander vergleichbar:

 If(Number=Picture2)

Dieser Variablentyp kann nicht negiert werden:
 
 Boolean:=-False


Plug-in Befehle

Der Plug-In Befehl PExt scheint nicht richtig definiert zu sein.
Es wurden diesem Plug-In Befehl zu wenige Parameter übergeben.
Es wurden diesem Plug-In Befehl zu viele Parameter übergeben.
Der Plug-In Befehl Variable scheint nicht richtig definiert zu sein.

 Allgemeine Fehler

Zwei Methoden haben den gleichen Namen: Name.
Um Ihre Datenbank zu kompilieren, muss jede Projektmethode einen anderen Namen haben.

Interner Fehler # xx.
Erscheint diese Meldung, rufen Sie den Technischen Support von 4D an und nennen Sie die Fehlernummer.

Die Variable VARIABLE lässt sich nicht typisieren. Sie wird in Methode M1 verwendet.
Der Variablentyp lässt sich nicht bestimmen. Eine Compiler Direktive ist notwendig.

Die Originalmethode ist beschädigt.
Die Methode in der Orginalstruktur ist beschädigt. Löschen oder ersetzen Sie diese.

Unbekannter 4D Befehl.
Die Methode ist beschädigt.

Retypisierung der Variablen VARIABLE im Formular FORM.
Diese Meldung erscheint, wenn Sie zum Beispiel den Namen OK einer Variablen vom Typ Diagramm in einem Formular angeben.

Der Name der Funktion NAME wird bereits als Name einer Variablen im Formular NAME verwendet.
Nennen Sie entweder die Funktion oder die Variable anders.

Eine Methode und eine Variable haben den gleichen Namen: Name.
Nennen Sie entweder die Methode oder die Variable anders.

Ein Plug-In Befehl und eine Variable haben den gleichen Namen: Name.
Nennen Sie entweder den Plug-In Befehl oder die Variable anders.

Kann in einer als thread-safe deklarierten Methode keinen Befehl aufrufen, der nicht thread-safe ist.
Ändern Sie die Methode, so dass alle Befehle thread-safe sind oder ändern Sie die Deklaration der Methode, um einen kooperativen Prozess zu starten.

Kann in einer als thread-safe deklarierten Methode keine nicht thread-safe Methode 'Methodenname' aufrufen.
Ändern Sie die Methode, so dass sie thread-safe wird oder ändern Sie die Deklaration der Methode, um einen kooperativen Prozess zu starten.

Diese Meldungen werden in 4D generiert, während die kompilierte Datenbank läuft. Sie erscheinen in einem spezifischen Fehler-Dialogfenster.

Das Ergebnis ist außerhalb des Array-Bereichs.
Ist MyArray ein Array mit fünf Elementen, erscheint diese Meldung, wenn Sie im Array z.B. auf Element 17 zugreifen wollen.

Division durch Null.

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

Zugriff auf nicht vorhandenen Parameter.
Die lokale Variable $4 wird verwendet, in der aktuellen Methode wurden jedoch nur drei Parameter übergeben.

Der Zeiger ist nicht korrekt initialisiert.

 MyPointer->:=5

wenn MyPointer noch nicht initialisiert wurde.

Der Zielstring ist kürzer als die Quelle.

 C_STRING(MyString1;5)
 C_STRING(MyString2;10)
 MyString2:="Flowers"
 MyString1:=MyString2

Ungültiger Zeichenzugriff.

 i:=-30
 MyStringi≥:=MyString2 or MyString[[i]]:=MyString2

Der Parameter ist ein leerer String.

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

Modulo durch Null.

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

Ungültiger Parameter in einem AUSFÜHREN Befehl.

 EXECUTE FORMULA("MyMethod(MyAlpha)")

wenn MyMethod nicht einen alphanumerischen Parameter erwartet.

Zeiger auf eine unbekannte Variable.

 MyPointer:=Get pointer("Variable")
 MyPointer:="MyString"

wenn Variable nicht explizit in der Datenbank erscheint.

Versuch einer Typenänderung mit einem Zeiger.

 Boolean:=Pointer->

wenn Pointer auf ein Feld vom Typ Ganzzahl zeigt.

Falsche Verwendung eines Zeigers oder Zeiger auf eine unbekannte Variable.

 Character:=StringVar≤Pointer->≥
 Character:=StringVar[[Pointer]]

wenn Pointer nicht auf eine Zahl zeigt.



Siehe auch 

Compiler Direktiven
Einzelheiten zur Syntax
Richtlinien zur Typisierung
Tipps zur Optimierung

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Compiler

 
GESCHICHTE 

 
SCHLÜSSELWÖRTER 

warning

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)