名前と型に加え (4Dのフィールドの型参照)、フィールドプロパティもフィールドのアピアランス、データ入力、表示、編集やデータ格納条件などを規定します。テーブルの各フィールドのプロパティは個別に設定できます。
フィールドプロパティはインスペクターパレット、または特定のものについてはフィールド上を右クリックして表示されるコンテキストメニューで設定できます。
注: データが入力されているフィールドのプロパティの変更することができます。特定の変更は、既存のデータを考慮します。例えば、重複不可属性を有効にした際、すでに重複するデータが存在するならば、4Dは警告ダイアログを表示して、この属性を有効にするのを許可しません。また入力属性の変更によって、既存のデータが影響を受けることはありません。例えば、ヌル値の入力を拒否属性を有効にした場合には、その後に行われる入力のみチェックされます。すでに入力されている値に、空のフィールドを含むかもしれません。
インスペクターパレットの"定義"エリアでは基本的なフィールドプロパティを設定します。いくつかのプロパティは特定の型のフィールドが選択されたときにのみ指定できます。
フィールドごとにカラーを指定できます。カラーは役割や属性によってフィールドを見分けるために使用できます。例えば重複不可フィールドに特定のカラーを使用して、必須入力フィールドに別のカラーを指定するといったことができます。
テー ブルごと (テーブルイメージのカラー参照) あるいはリレーションごと (リレーションプロパティの定義参照) 、個別にカラーを割り当てることもできます。
注: ストラクチャーエディターで設定されたカラーは、フォームに表示されるフィールドのカラーには影響ありません (背景および枠線の色参照)。
フィールドに対して設定されたカラーはフィールド名に適用されます。フィールドにカラーを設定するには、フィールドを選択し以下のいずれかを使用します:
- ストラクチャーエディターのツールバーのカラーボタン
- フィールドのコンテキストメニューのカラーコマンド
- インスペクターパレットのカラーオプション
自動オプションを使用するとフィールドの標準オリジナルカラーが使用されます。
フィールドに対し非表示プロパティを設定すると、アプリケーションモードやプラグインに対し、フィールドを非表示にすることができます。非表示属 性はユーザーからフィールドを隠します。この属性が設定されたフィールドはアプリケーションモードで表示される標準の4Dエディターやダイアログボックス に現れません。さらにプラグインから使用することもできません。アプリケーションモードの以下のエディターやダイアログボックスが関連します:
これらそれぞれの場所で、ユーザーはこのフィールドを見たり選択したりすることはできません。例えばクイックレポートエディターで、ユーザーは非表示フィールドを使用したレポートを作成することができません。
注: エディターを使用する際、ユーザーは設定をディスクファイルとして保存することができます (例えばクエリや並び替えの設定など)。この場合、設定が保存された後に非表示に設定されたフィールドは、この設定ファイルをロードした場合利用すること が可能です。さらにユーザーはフォーミュラエディターに非表示フィールドをタイプ入力することはできます。
ストラクチャーエディターウィンドウで、非表示フィールドはイタリックで表示されます。
重複不可属性は、各々のレコードがそのフィールドに重複しない値を格納することを保証したい場合に使用します。重複不可属性は、テーブル中でレコー ドをユニークに識別するフィールドに使用します。 重複不可フィールドは例えば従業員番号や社会保障番号、注文番号などを検証する場合に便利です。
重複不可属性は空の値や入力された値などが重複して存在することを避けます。空のフィールドを他のレコードにコピーすることはできません。
ストラクチャーエディターの情報バーには、重複不可属性がフィールドに設定されているかどうかが表示されます (ストラクチャーエディター参照)。
4Dでは、重複不可属性のフィールドはインデックスが必要になります:
- フィールドに対して重複不可属性を選択すると、(インデックスがまだない場合)インデックスが作成されることを意味するアイコンが表示されます:

- ストラクチャーエディターでは、重複不可フィールドからインデックスを削除することはできません(重複不可フィールドを選択している際には、プロパティリストのなしオプション、または削除コマンドは利用できません):

重複不可フィールドからインデックスを削除したい場合、その前に重複不可属性を外す必要があります。
このオプションは、4Dデータベースへと送られる REST リクエストのコンテキストにおいてそのテーブルが公開されるかどうかを管理します。デフォルトではすべてのテーブルがRESTに公開されています。
セキュリティ上の理由から、データベースの一部のフィールドのみ公開したいという場合もあります。例えば、[Employees]Salary のようなフィールドは公開したくないでしょう。
フィールドを公開したくない場合は、そのフィールドの RESTリソースとして公開のオプションのチェックを外します。
注: このオプションは、テーブルレベルでも設定する事ができます。詳しくはテーブルプロパティを参照ください。
あるフィールドが REST を通してアクセス可能であるためには、その親テーブルも公開されている必要があります。親テーブルが公開されていない場合、そのフィールドは個別の公開設定に関わらず、どれもアクセス不可になります。これにより、フィールドの公開オプションを個別に変更することなく、テーブルのREST公開を一時的に有効化・無効化することができます。
このオプションは ORDA のリモートデータストア機能のコンテキストにおいて使用されます。詳細については、 コマンドを参照してください。
ヌル値の入力を拒否プロパティはヌル値の格納を防ぐために使用されます。
この属性がフィールドに対して設定されると、そのフィールドにヌル値を格納することができなくなります。この属性が設定されたフィールドがヌル値を受け取ると、エラーが生成されます。
この低レベルなプロパティはSQLのNOT NULL属性に対応します。一般に4Dデータベースでヌル値を使用したい場合、もっぱら4DのSQLランゲージを使用することを推奨します。
注: 4Dにおいて、フィールドに“必須入力”属性を設定できます (後述)。これら2つのコンセプトは同様ですが、しかしスコープが異なります。“必須入力”属性はデータ入力制御であり、“ヌル値の入力を拒否”属性はデータベースエンジンレベルです。
このプロパティは、4Dランゲージでフィールドを扱う際に、空値とヌル値を等しく扱うために使用します。
互換性の理由で、4Dデータベーステーブルに格納されたヌル値は、4Dランゲージで処理される際に自動でデフォルト値に変換されます。例えば以下の文において:
myTextVar:=[myTable]myTextField
myTextFieldフィールドにヌル値が格納されていた場合、myTextVarには空の文字列 “” が代入されます。
デーフォルト値はデータ型により異なります:
- 文字およびテキストデータ型: “”
- 実数、整数、倍長整数データ型: 0
- 日付データ型: 00/00/00
- 時間データ型: 00:00:00
- ブールデータ型: False
- ピクチャーデータ型: 空のピクチャー
- BLOBデータ型: 空のBLOB
他方、この原則のメカニズムはクエリなど4Dデータベースエンジンレベルでの処理には適用されません。実際空値 (例えばmyvalue=0) を検索してもヌル値は見つからず、ヌル値を検索しても空値は見つかりません。両タイプの値 (デフォルト値とヌル値) が同じフィールドの異なるレコードに保存されている場合、追加のコーディングや特定の処理が必要となります。この不便さを解消するため、ヌル値を空値にマップオプションを使用して4Dランゲージのすべての処理を標準化できます。このプロパティを使用すれば、デフォルト値を使用する原則がすべての処理に拡張されます。ヌル値を格納したフィールドは自動でデフォルト値を格納しているものとして扱われます。
このプロパティはデータベースエンジンの低レベルで適用されます。 特にコマンドの動作に影響を与えます。
注: UUIDフォーマットの文字フィールドではUUIDが生成されていない場合でもNULLとは扱われません (UUIDフォーマット参照)。
互換性に関する注意: ORDA 開発においてこのオプションを使用することは推奨されていません。ORDA ではNULL の扱いはサポートされているからです。
"自動インクリメント" プロパティはテーブル内に連続したシーケンス番号を生成するために使用されます。この属性は整数、倍長整数、整数64bit型 (4Dのフィールドの型参照) に使用できます。
このプロパティを持つフィールドは、テーブルにレコードが作成されるたびに、自動で値が増分されます。フィールドに代入される連番は、4Dが管理するテーブルの"内部カウンター"に一致します。この内部カウンターには4Dコマンドと、および#Nマーカー (デフォルト値参照) を使用してアクセスすることもできます。
代入される番号は、レコードが削除されてもテーブル内で再利用されることはありません。トランザクション中で生成された番号は、トランザクションがキャンセルされると失われます。
“自動インクリメント”プロパティはSQL AUTO_INCREMENT属性に対応しており、このランゲージを使用して設定することもできます。この属性を持つフィールドのインスペクターにはSQL情報エリアにAUTO INCREMENTラベルが表示されます。
警告: 生成されるシーケンス番号は同テーブル内に限ってはユニークな値ではありますが、レコードの主キーに使うユニークIDとしてこの自動インクリメント番号を使うことは推奨されません。とくに同一のストラクチャーで複数のデータファイルを扱う場合には、テーブルの内部カウンターが同期されていないリスクがあります。さらに、内部カウンターはコマンドにより再設定することが可能です。そのため、ユニークなIDが必要な場合には、UUIDの使用が強く推奨されます。UUIDには次の利点があります:
- UUID はすべてのテーブルだけでなく、データベース間でもユニークなIDを生成します。
- UUIDの生成には 自動 UUID オプション (後述参照) と コマンドを組み合わせることができます。
このオプションメニューはテキスト、BLOB、ピクチャー、そしてオブジェクト型のフィールドで、フィールドデータを格納する場所を指定するために利用できます。以下のオプションから選択できます:
- レコード: データは各レコードとともに保存されます。大きなデータを扱う場合、通常このオプションを選択すべきではありません。ただしテキスト型の場合デフォルトでこのタイプが選択されています。これはBツリーインデックスを使用する場合にこのデータ格納タイプを選択していなければならないためです。テキストデータをレコード外に保存するよう設定すると、インデックス選択メニューが非表示になります。
- データファイル: データはデータファイル内に保存されますが、レコードブロックとは別なエリアに格納されます。BLOBとピクチャーフィールドではこのオプションがデフォルトで選択されています。テキスト、BLOB、ピクチャー、そしてオブジェクト型の大きなデータをレコードの外に格納することで、データベースの動作を最適化できます。
- 外部: データは個別のファイルとして、.4DDファイル外に保存されます。このオプションについてはデータをデータファイル外に保存で説明しています。
注:
- このオプションは、これが選択された後テーブル内で新規に作成されたレコードに対して有効です。すでに存在するレコードについてはこのオプションは適用されず、この場合、そのテーブルは内部/外部にデータを保存する混合モードで動作することになります。既存のレコードにもこのオプションを適用したい場合、レコードの強制更新オプションを使用してデータを圧縮してください (圧縮ページ参照)。
- データファイルの外部に保存されているデータについては、データ暗号化機能がたとえ有効化されていても、それによって管理される対象外です(データの暗号化参照)。
- このオプションはオブジェクト型フィールドに対しては利用できません。
前節で説明したとおり、最適化の目的で、テキスト、BLOB、ピクチャー、およびオブジェクトフィールドのデータをレコードの外あるいはデータファイルの外に保存できます。
上記の設定を行った場合でも、パフォーマンスの理由から、適切なサイズに制限したうえで、データをレコードに保存するよう強制することができます。この機能は、特にアプリケーションが一定でないサイズのBLOB、ピクチャー、テキストまたはオブジェクトデータを扱う際に最適化されます。
この設定は内部ストレージの最大サイズ (バイト) オプションで行います。ここに入力されたサイズ (バイト単位) よりもサイズが小さいデータは格納場所の設定に関わらずレコード内に保存されます。例えばピクチャーフィールドでこの値を30,000バイトに設定した場 合、20 KBのピクチャーはレコード内に保存され、40 KBのピクチャーは上記のオプションで設定した場所に保存されます。デフォルト値は0で、すべてのデータがレコードの外に保存されます。
このプロパティは文字型のフィールドで利用できます。このプロパティは、このフィールドがUUID識別子を格納するためのものであることを示します。格納されるデータはUUIDフォーマットを満たしていなければなりません (32の文字 (A-F, a-f) および数字 (0-9) の組み合わせ)。これを行うために自動UUIDプロパティ、コマンド、あるいはカスタムアルゴリズムを使用できます。
このフィールドにUUIDフォーマットでない文字列を格納使用とすると、4Dはそれを自動で変換します。同じ処理は非文字フィールドからUUIDフィールドに変更された際にもその内容に対して適用されます。つまりレコードをロードする際、値は再フォーマットされ、表示されます。
UUIDフォーマット属性付きのフィールドをフォームに表示することができ、入力を行うことさえ可能です。文字は大文字で表示されます。小文字を表示したい場合、変数を使用する必要があります。
注:
- UUIDフォーマットのフィールドにキーワードインデックスや選択リストを割り当てることはできません。
- UUIDフォーマットの2つのフィールド間をリレーションで結ぶことができます。しかし標準の文字フィールドとUUIDフォーマットフィールド間にリレーションを作成することはできません。
- 一度初期化 (生成) されたUUIDフィールドがNULL値を持つ場合、それは空の文字列を返します。値が生成されていないUUIDフィールドはNULLではなく"000..." (0の数は文字数と同じ) を返します。プロパティは値が生成されていないUUIDフィールドには適用されません ("000..."が表示される)。
このオプションはUUIDフォーマットプロパティを選択したときにのみ利用可能となります。
自動UUIDプロパティを使用して、フィールドに自動でUUID番号を生成することができます。
この番号は以下のコンテキストで自動的に計算されます:
- レコードが作成されるとき。
- UUIDフィールドにNULL値が含まれるレコードがロードされるとき。このようなレコードは特に、NULL値を空値にマップがチェックされていない状態で、UUIDフィールドがテーブルに追加される前に作成された場合に発生します。
どのような場合であれ、自動で生成されるUUIDをフィールドに保存するためには、レコードを保存しなければなりません。
注: データが読み込まれる場合は、このプロパティが選択されていても、4Dは新しい番号を生成せず、読み込んだ値を使用します (そしてフォーマットが有効でない場合は変換を行います)。しかし読み込んだ値が空の場合はUUIDが自動で生成されます。
このプロパティはテキストおよび文字フィールドで利用できます。このオプションを選択すると、フィールドに格納されたデータに対するクエリーや並び替えはスタイルタグを考慮しなくなります。
このオプションはフォーム中のテキストエリアのデータに異なるスタイルを適用する4Dの能力に関連します。この機能に関する詳細はマルチスタイル (リッチテキストエリア)を参照してください。
スタイルの設定はテキストにHTMLタグを挿入することで行われます。これらのタグはテキストエリアが表示される際に解釈されます。
スタイルタグはデータとともに格納されます。例えばテキストフィールドに"week end"と入力すると、4Dは"week <SPAN STYLE = "color: #D81E05">end</SPAN>"を格納します。この処理はフォームレベルでユーザーに対し透過的です。しかしクエリーや並び替えにおいては、スタイルタグを無視するよう4Dに指示するために特別な設定が必要です。先の例で"week end"を検索するためには、巣とr買う茶ーエディターでフィールドに対しテキストのクエリや並び替えでタグを使用しないオプションを選択する必要があります。
注: このオプションが設定されている場合、4Dで次のコードによりthefield からthevalueの値を検索するのと同じです。:
QUERY BY FORMULA(OBJECT Get plain text(thefield)="thevalue")
インデックスプロパティはBLOBとピクチャーを除くすべてのフィールド型で利用できます。キーワードインデックスプロパティは文字、テキストおよびピクチャーフィールドで利用できます。
インデックスを使用すると、データ間の処理や検索の速度を向上させることができます。
インデックスの管理についてはインデックスの作成と変更で説明しています。
データ入力制御はフォームレベルでフィールドや入力可オブジェクトに対し設定できます。データ入力制御はフォーム上のフィールドや入力可オブジェクトに、ユーザーが入力できるものを制限します。
フィールドに必須入力属性が設定されていると、データ入力時にユーザーはそのフィールドに値を入力しなければなりません。4Dは必須入力フィールドが空である場合、そのレコードを受け入れません。必須入力はデータベース中で必須の情報を格納するフィールドに設定します。レコードをユニークに識別するためのフィールドは、必須入力を設定すべき良い例です。社会保障番号、請求番号、従業員番号などには必須入力属性を設定して、レコードの整合性を保護することができます。
この属性は特定のフォームのフィールドに対して設定することもできます。ストラクチャーエディターで必須入力属性を選択すると、フォームごとにそれを解除することはできません。他方、ストラクチャーエディターでこの属性が設定されていない場合に、フォーム上で必須入力属性を適用することは可能です。フォームでフィールドに必須入力属性を設定することに関しては、“入力可および必須入力属性を設定する”を参照してください。
注: 4Dにおいて、フィールドには"ヌル値の入力を拒否"プロパティを設定することができます (前述)。2つのコンセプトは同様ですが、スコープが異なります。“必須入力”属性はデータ入力制御であり、“ヌル値の入力を拒否”属性はデータベースエンジンレベルで動作します。
Iフィールドにこの属性が設定されていると、4Dはフィールドに最初に入力された値を受け入れますが、レコードが保存された後は、ユーザーがそれを変更することを許可しません。ユーザーは最初にレコードが作成されるとき、レコードが保存される前までしか、入力を編集することはできません。レコードが保存されると、フィールドの値は編集できなくなります。その後、値はメソッドあるいはデザインモードでこのオプションを取り除いた後でのみ、編集可能です。
修正不可は会計監査の支払日等を格納するフィールドに使用されます。修正不可はしばしばテーブル中のレコードをユニークに識別するためのフィールドに使用されます。
注: この属性はページモードで詳細フォームに表示されるフィールドに対して動作します。他のケース (リスト入力、リストあるいはページモードのサブフォーム中への入力) では、フィールドの値は編集可能です。
表示のみが設定されたフィールドには、ユーザーはキーボードから値を入力することはできません。そのようなフィールドにはデフォルト値を設定するか、フィールドに値を挿入するコードを書かなくてはなりません。表示のみ属性を持つフィールドは、計算された総計やメソッドで割り当てられて一連番号など、ユーザーに編集させたくない値を表示する際に便利です。
特定のフォームに対して、フィールドを入力不可に設定することもできます。フォーム上のフィールドを入力不可に設定する方法は、“入力可と必須入力属性を設定する”を参照してください。
このオプションはテキストフィールドで利用できます。このオプションがチェックされていると、そのあとに作成されたフォームで、テキストフィールドは自動で複数行のテキストを受け入れるよう設定されます。この場合のデフォルトの特徴は以下の通りです:
- 複数行に対応した高さ
- 水平スクロールバー
- 実行時、改行キーにより改行が挿入される
このオプションがチェックされていないと、フォーム上のテキストフィールドのデフォルトアピアランスは文字フィールドと同じです。一行分の高さでスクロールバーがなく、改行キーによりフォーム中の次のオブジェクトに移動します。
フォームエディターでこれらのアピアランスについてはいつでも変更できます。
項目選択を使用する属性を使用すると、フィールドに情報を入力する際、選択リストが表示されます。この属性を使用するためには、まずリストエディターを使用して選択リストを作成する必要があります (リスト参照)。
特定のフォーム上でフィールドに対し選択リストを割り当てることができます。しかしフォーム上だけで選択リストを割り当てると、そのリストはクエリーエ ディターなど他のエディターやダイアログボックス上では表示されません。フォームで選択リストを使用する方法についてはデータ入力の制御と補助を参照してください。
注: フォームレベルで指定リストや除外リストを設定することもできます。項目選択を使用するオプションをチェックしたら、メニューから作成済みの選択リストを選択します。[...]ボタンをクリックすると、直接リストエディターにアクセスできます (リスト参照)。
フィールドにヘルプTipを追加して、ユーザーにフィールドに関する追加の情報を提供することができます。TipがヘルプTipエリアに入力されると、ユーザーがフォーム上でそのフィールド上にカーソルを合わせるとTipがフィールドの隣に表示されます。ヘルプTipはすべてのプラットフォーム上で表示されます。
ユーザーがマウスポインターをフィールド上に重ねると、tipは以下のように表示されます:

注: ヘルプtipsは、 コマンドのTips enabled セレクターを使用することによって、アプリケーション全体に対して有効化あるいは無効化することができます。
ヘルプメッセージは他に2通りの方法でフィールドに関連付けることもできます:
- フォームエディターレベルで関連付けることができます。この場合、フィールドのヘルプTipsは他のフォームでは表示されません。ヘルプTipsをフォームで使用する際の詳細な情報については、ヘルプメッセージ の章を参照してください。
- カレントプロセスにおいてコマンドを使用することで関連付けることもできます。
インスペクターパレットのコメント欄はフィールドに関する追加情報を格納するために使用できます。このコメントはすべてのデベロッパーに対して表示されます。
テーブルやリレーションも各々コメントエリアを持っています。
インスペクターパレットのSQLエリアには、SQLランゲージからそのフィールドを参照する際の有用な情報が表示されます。
このエリアには特に、指定された名前がSQLの命名規則に沿っているかどうかが表示されます (例えば4Dと異なりSQLは名前にスペースが含まれることを許可しません)。
注: SQLには予約語の一覧も定義されており、これにはSQL関数やSQLキーワードも含まれます。これらの予約語はメソッドエディターので見ることができます。
フィールドでは、SQL情報エリアにはSQL属性も表示されます (型やプロパティ)。