Version 2003 (Geändert)
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.
Warnungen
Diese Meldungen werden während der Kompilierung erstellt. Die zugrundeliegenden 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)
Der Befehl 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 Undefiniert 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.
String[[Pointer->]]:="a"
Nimmt an, dass der Arrayindex vom Typ Zahl ist.
ALERT(MyArray{Pointer->})
Fehlender Parameter im Prozessaufruf des Plug-In.
WR SET FONT(Area)
Fehlermeldungen
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.
Die Meldungen sind nach folgenden Themen sortiert: Typisierung, Syntax, Parameter, Operatoren, Plug-In Befehle und allgemeine Fehler.
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
Änderung der maximalen Länge eines String.
C_STRING(3;MyString) C_STRING(5;MyString)
Änderung der Anzahl Dimensionen eines Array.
ARRAY TEXT(MyArray;5;5) ARRAY TEXT(MyArray;5)
Typisierungskonflikt der Variablen MyArray im Formular.
ARRAY INTEGER(MyArray)
Deklaration eines Arrays ohne Dimensionen.
ARRAY INTEGER(MyArray)
Es wurde eine Variable erwartet.
COPY ARRAY(MyArray;"")
Es wurde eine Konstantennummer erwartet.
C_STRING(Variable;MyString)
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 zu diesem Ausdruck nicht kompatibel.
Text:="Number"+Num(i)
Die in diesem Ausdruck verwendeten Variablentypen sind nicht kompatibel.
Integer:=MyDate*Text
Änderung des Variablentyps $i von Fester Länge in Zahl.
$i:="3" $($i):=5
Index des Arrays ist keine Zahl.
IntArray{"3"}:=4
Retypisierung der Variablen Variable vom Typ Text auf 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.
C_INTEGER(${3}) For($i;3;5) ${$i}:=String($i) End for
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.
MyMethod(MyString)
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 können nicht miteinander verglichen werden.
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.
The 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.
Meldung bei Bereichsprüfung
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 MyString[[i]]:= 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("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.
Referenz
Compiler Direktiven, Einzelheiten zur Syntax, Richtlinien zur Typisierung, Tipps zur Optimierung.