ここでは、コンパイラが出力するメッセージについて説明します。メッセージは、以下の数種類になります。
- 警告メッセージ…見落としがちな過ちを避ける手助けをします。
- エラーメッセージ…間違いを正します。
- 範囲チェックメッセージ…4D内で生成されるメッセージ。
このメッセージは、コンパイルの過程で出力されます。ここでは、各メッセージを警告の対象となるコード例と共に示します。
注: 警告はエラーと異なります。警告はコードに誤りがないか、開発者に注意を促すために生成されるものです。警告対象のコードに誤りがないことが確かな場合、警告は無視することができます。
 COPY ARRAYコマンド中にポインタが存在します。
 SELECTION TO ARRAYコマンド中にポインタが存在します。
  SELECTION TO ARRAY(Pointer->;MyArray)
 SELECTION TO ARRAY([MyTable]MyField;Pointer->)
ARRAY TO SELECTIONコマンド中にポインタが存在します。
  ARRAY TO SELECTION(Pointer->;[MyTable]MyField)
LIST TO ARRAYコマンド中にポインタが存在します。
 ARRAY TO LISTコマンド中にポインタが存在します。
 配列定義コマンド中にポインタが存在します。
 ARRAY REAL(Array; Pointer->)と書いた場合、このメッセージは出力されません。配列の次元数はデータタイプに影響を与えないからです。ポインタで参照する配列は、事前に定義しておく必要があります。
 DISTINCT VALUESコマンド中にポインタが存在します。
  DISTINCT VALUES(Pointer->;Array)
Undefined関数は使用しないでください。
 Undefined関数はコンパイルしたデータベースでは常にFALSEを返します。
 このメソッドは、パスワードにより保護されています。
 フォームXページ目の自動動作ボタンの名前がありません。
衝突を避けるため、すべてのボタンに名前が必要です。
 ポインタの参照先を文字として処理します。Pointer->[[2]]:="a"
 文字列のインデックスを数値タイプとして処理します。
  String[[Pointer->]]:="a"
配列のインデックスを実数タイプとして処理します。
  ALERT(MyArray{Pointer->})プラグインコマンドの呼び出しでパラメータが不足しています。
 注: 以下のタグを使用すると、個別に警告メッセージを有効にしたり無効にしたりできます:
// %W-warning_number で警告を無効にできます。
// %W+warning_number で警告を有効にできます。
 この方法で警告を有効にしたり無効にしたりすると、効果はその後に解析されるすべてのコードに効果があります。全体的に警告を無効にしたり有効にしたりしたい場合は、"Compiler_xxx"という名前のメソッドに適切なタグを記述することができます。このような名前を持つメソッドがまずコンパイラーにより解析されるためです。例えば"COPY ARRAY中にポインターがあります"警告を無効にするには、"// %W-518.1"タグを記述します。
このメッセージはコンパイルの処理段階で生成されます。データベースのコンパイルにより表示されるエラーを修正するかどうかはユーザが判断します。各メッセージを問題のあるコードの例と共に示します。
メッセージは次のグループに分けて説明します:タイプ、シンタックス、引数、演算子、プラグインコマンド、全般のエラー
 タイプ
 変数タイプの演算子に互換性がありません。そのため、タイプを設定することが出来ません。
  MyReal:=12.3
 MyBoolean:=True
 MyReal:=MyBoolean文字列の長さは変更できません。
  C_STRING(3;MyString)
 C_STRING(5;MyString)
配列の次元数は変更できません。
 フォームの配列変数タイプが一致しません。
 配列定義コマンドに次元数がありません。
 変数が必要です。
 定数が必要です。
  C_STRING(Variable;MyString)
変数タイプが不明です。この変数はメソッド"M1"で使用されています。
変数タイプが決められません。コンパイラコマンドが必要です。
 定数タイプが無効です。
  OK:="The weather is nice"
メソッド"M1"が不明です。
この行は存在しないメソッド、もしくは存在しなくなったメソッドを呼び出しています。
 誤ったフィールドの使用。
 文字列の長さは255文字(バイト)までです。
  C_STRING(325;MyString)
変数Variableはメソッドではありません。
  Variable(1)
変数Variableは配列ではありません。
  Variable{5}:=12
結果が式と一致しません。
 変数タイプが不適切です。
  Integer:=MyDate*Text
変数$iのタイプを固定長文字列から実数に変更できません。
  $i:="3"
 $($i):=5
配列のインデックスが数値ではありません。
  IntArray{"3"}:=4
変数Variableのタイプをテキストから配列に変更できません。
 変数Variableのタイプをテキストから実数に変更できません」
 MyBooleanのタイプをブール配列から実数タイプの変数に変更できません。
  Variable:=MyBoolean
配列IntArrayのタイプを整数タイプの配列からテキストタイプの配列に変更できません。
 “IntArray”が他の所で整数配列として定義されている場合。
 ポインタタイプ以外の変数をポインタとして参照しています。
Variable->:=5※"Variable"のタイプがポインタではない場合。
 変数Var1のタイプをテキストから数値に変更できません。
  Var1:=3.5
フィールドの使い方に誤りがあります。
  Variable:=[MyTable]MyField
※[MyTable]MyFieldは日付フィールドで"Variable"は数値の場合。
 シンタックス
 ポインタタイプ以外の変数をポインタとして参照しています。
  Variable:=Num("The weather is nice")->この関数を参照することは使用できません。
 シンタックスエラー
  If(Boolean)
 End for
"}"がありません。
※文中の右カッコ"}"の数が左カッコ"{"の数より少ない場合。
 "{"がありません。
※文中の左カッコ"{"の数が右カッコ"}"の数より少ない場合。
 ")"がありません。
※文中の右カッコ")"の数が左カッコ"("の数より少ない場合。
 "("形のカッコがありません。
※文中の左カッコ"("の数が右カッコ")"の数より少ない場合。
 フィールドが必要です。
 ")"がありません。
 変数が必要です。
 定数値が必要です。
 セミコロン(";")が必要です。
 文字参照記号"]]"が足りません。
  MyString[[3:="a"
文字参照記号"[["が足りません。
  MyString3]]:="a"
サブテーブルは使用できません。
  ARRAY TO SELECTION(Array;Subtable)
IF文には、ブール型が必要です。
  If(Pointer)
式が複雑すぎます。
命令文を短く分割してください。
 メソッドが複雑すぎます。
"Case of...End"または"If...End if"構造が多すぎます。
 フィールドが不明です。
使用メソッドがおそらく他のデータベースからコピーされたもので、存在しないフィールドへの参照が式に含まれています。
 テーブルが不明です。
使用メソッドがおそらく他のデータベースからコピーされたもので、存在しないテーブルへの参照が式に含まれています。
 ポインタが参照する式に誤りがあります。
  Pointer:=->Variable+3
文字列インデックスの使い方に誤りがあります。
  MyReal[[3]]
または
  MyString[[Variable]]
※"Variable"が数値変数以外の場合。
 引数
 この式の結果を引数としてこのメソッドもしくはコマンドに渡すことはできません。
 ※MyMethodの引数にブール式が必要な場合。
 このメソッドに渡す引数が多すぎます。
  DEFAULT TABLE(Table;Form)この値を引数としてこのメソッドもしくはコマンドに渡すことはできません。
  MyMethod(3+2)
※MyMethodの引数にブール式が必要な場合。
 結果のタイプが一致しません。
 変数のタイプが一致しません。
  C_INTEGER(${3})
 For($i;3;5)
    ${$i}:=String($i)
 End forこのコマンドに引数は不要です。
 このコマンドには1つ以上の引数が必要です。
  DEFAULT TABLE
MyStringを引数としてメソッドに代入することはできません。
  MyMethod(MyString)
※MyMethodの引数にブール式が必要な場合。
 引数"$1"のタイプが呼ぶ側のメソッドと呼ばれる側のメソッドで一致していません。
  Calculate("3+2")
※メソッド"Calculate"の中でコンパイラ指示子C_INTEGER($1)が記述されている場合。
 COPY ARRAYコマンドの引数に変数が含まれています。
 変数$1のタイプを数値からテキストに変更できません。
  $1:=String($1)
配列を引数として使用できません。
ReInit(MyArray)配列をメソッドに代入する場合は、配列にポインタを渡してください。
 演算子
 演算と変数タイプが一致しません。
 ブール値のフィールドを加算することはできません。
 演算子>は不要です。
  QUERY(MyTable;[MyTable]MyField=0;>)
これらの変数タイプを比較することはできません。
  If(Number=Picture2)
この変数タイプに-(マイナス)符号を付けることはできません。
 プラグインコマンド
 プラグインコマンド"PExt"の定義が正しくありません。
 プラグインコマンドに対する引数が足りません。
 プラグインコマンドに対する引数が多すぎます」。
 プラグインコマンドの変数の定義が正しくありません。
 全般のエラー
 同じ名前のメソッドが複数あります。
データベースをコンパイルするには、プロジェクトメソッドすべてに異なる名前をつける必要があります。
 内部エラーNo.xx
このメッセージが出力されたら4D社テクニカルサポートに問い合わせ、エラー番号を教えてください。
 変数Variableのタイプが不明です。この変数はM1メソッドで使用されています。
変数のタイプが判断できません。ココンパイラ指示子を使用してください。
 オリジナルのメソッドが壊れています。
オリジナルのストラクチャでメソッドが壊れています。該当するメソッドを削除するか置き換えてください。
 4Dのコマンドでありません。
このメソッドは壊れています。
 フォームに配置した変数のタイプは変更できません。
フォーム内のグラフタイプの変数に"OK"といった名前をつけると、このメッセージが出力されます。
 関数と変数が同じ名前です:Name
関数か変数いずれかの名前を変えてください。
 メソッドと変数が同じ名前です:Name
メソッドか変数いずれかの名前を変えてください。
 プラグインコマンドと変数が同じ名前です:Name
プラグインコマンドか変数いずれかの名前を変えてください。
これらのメッセージはコンパイルされたデータベースの実行中に、4Dにより表示されるエラーメッセージです。
 結果が変数の範囲を越えました。
  MyArray{17}:=2.3
MyArrayが要素数5つの配列であるとき、上記のステートメントが実行された場合、このメッセージはMyArray{17}にアクセスしようとすると表示されます。
 ゼロによる割算が発生しました。
  Var1:=0
 Var2:=2
 Var3:=Var2/Var1
引数がありません。
カレントプロシージャには引数が3つしか渡されていないのに、ローカル変数“$4”を使用しているような場合にこのメッセージが表示されます。
 ポインタが初期化されていません。
  MyPointer->:=5
i※MyPointerが初期化されていない場合。
 代入先が小さすぎます。
  C_STRING(MyString1;5)
 C_STRING(MyString2;10)
 MyString2:="Flowers"
 MyString1:=MyString2
文字参照エラー。
  i:=-30
 MyString[[i]]:=MyString2
引数に渡された文字列が空です。
  MyString[[1]]:=""
ゼロによる割算が発生しました。
  Var1:=0
 Var2:=2
 Var3:=Var2% Var1
EXECUTE内での無効な引数。
  EXECUTE("MyMethod(MyAlpha)")
※MyMethodが英数字以外の引数が必要な場合。
 変数へのポインタがコンパイラには未知のものです。
  MyPointer:=Get pointer("Variable")
 MyPointer:="MyString"※Variable変数がデータベース内で明確に宣言されていない場合。
 ポインタを使用して再タイプ設定を試行しました。
  Boolean:=Pointer->
※ポインタが整数タイプのフィールドを指す場合。
 ポインタの使い方に誤りがあるか、ポインタが未知のものです。
  Character:=StringVar[[Pointer->]]
 Character:=StringVar[[Pointer]]
※Pointerがポインタでなく数値の場合。