名前と型に加え (4Dのフィールドの型 参照)、フィールドプロパティもフィールドのアピアランス、データ入力、表示、編集やデータ格納条件などを規定します。テーブルの各フィールドのプロパティは個別に設定できます。
フィールドプロパティはインスペクターパレット 、または特定のものについてはフィールド上を右クリックして表示されるコンテキストメニューで設定できます。
注: データが入力されているフィールドのプロパティの変更することができます。特定の変更は、既存のデータを考慮します。例えば、重複不可属性を有効にした際、すでに重複するデータが存在するならば、4Dは警告ダイアログを表示して、この属性を有効にするのを許可しません。また入力属性の変更によって、既存のデータが影響を受けることはありません。例えば、ヌル値の入力を拒否属性を有効にした場合には、その後に行われる入力のみチェックされます。すでに入力されている値に、空のフィールドを含むかもしれません。
インスペクターパレット の"定義"エリアでは基本的なフィールドプロパティを設定します。いくつかのプロパティは特定の型のフィールドが選択されたときにのみ指定できます。
フィールドごとにカラーを指定できます。カラーは役割や属性によってフィールドを見分けるために使用できます。例えば重複不可フィールドに特定のカラーを使用して、必須入力フィールドに別のカラーを指定するといったことができます。
テー ブルごと (テーブルイメージのカラー 参照) あるいはリレーションごと (リレーションプロパティの定義 参照) 、個別にカラーを割り当てることもできます。
注 : ストラクチャーエディターで設定されたカラーは、フォームに表示されるフィールドのカラーには影響ありません (背景および枠線の色 参照)。
フィールドに対して設定されたカラーはフィールド名に適用されます。フィールドにカラーを設定するには、フィールドを選択し以下のいずれかを使用します:
ストラクチャーエディターのツールバーのカラー ボタン フィールドのコンテキストメニューのカラー コマンド インスペクターパレット のカラーオプション 自動 オプションを使用するとフィールドの標準オリジナルカラーが使用されます。
フィールドに対し非表示 プロパティを設定すると、アプリケーションモードやプラグインに対し、フィールドを非表示にすることができます。非表示 属 性はユーザーからフィールドを隠します。この属性が設定されたフィールドはアプリケーションモードで表示される標準の4Dエディターやダイアログボックス に現れません。さらにプラグインから使用することもできません。アプリケーションモードの以下のエディターやダイアログボックスが関連します:
これらそれぞれの場所で、ユーザーはこのフィールドを見たり選択したりすることはできません。例えばクイックレポートエディターで、ユーザーは非表示フィールドを使用したレポートを作成することができません。
注: エディターを使用する際、ユーザーは設定をディスクファイルとして保存することができます (例えばクエリや並び替えの設定など)。この場合、設定が保存された後に非表示に設定されたフィールドは、この設定ファイルをロードした場合利用すること が可能です。さらにユーザーはフォーミュラエディター に非表示フィールドをタイプ入力することはできます。
ストラクチャーエディターウィンドウで、非表示フィールドはイタリックで表示されます。
重複不可 属性は、各々のレコードがそのフィールドに重複しない値を格納することを保証したい場合に使用します。重複不可 属性は、テーブル中でレコー ドをユニークに識別するフィールドに使用します。 重複不可 フィールドは例えば従業員番号や社会保障番号、注文番号などを検証する場合に便利です。
重複不可 属性は空の値や入力された値などが重複して存在することを避けます。空のフィールドを他のレコードにコピーすることはできません。
ストラクチャーエディターの情報バーには、重複不可 属性がフィールドに設定されているかどうかが表示されます (ストラクチャーエディター 参照)。
4Dでは、重複不可 属性のフィールドはインデックスが必要になります:
フィールドに対して重複不可 属性を選択すると、(インデックスがまだない場合)インデックスが作成されることを意味するアイコンが表示されます: ストラクチャーエディターでは、重複不可フィールドからインデックスを削除することはできません(重複不可フィールドを選択している際には、プロパティリストのなし オプション、または削除コマンドは利用できません): 重複不可フィールドからインデックスを削除したい場合、その前に重複不可 属性を外す必要があります。
このオプションは、そのフィールドRSET経由で4Dデータベースに送られた4D Mobileリクエストのコンテキストの中で公開されるかどうかを設定します。デフォルトでは、全てのテーブルとフィールドは4D Mobileに公開されています。セキュリティ上の理由からデータベースの特定のフィールドのみ公開したいという場合もあります。例えば、[Employees]Salary のようなフィールドは公開したくないでしょう。
フィールドを公開したくない場合、そのフィールドの4D Mobileサービスで公開 のチェックを外します。
注: このオプションは、テーブルレベルでも設定する事ができます。詳しくはテーブルプロパティ を参照して下さい。
あるフィールドが4D Mobileを通してアクセス可能であるためには、その親テーブルが公開されている必要があります。親テーブルが公開されていない場合、そのフィールドは個別の公開設定に関わらず、どれもアクセス不可になります。これにより、フィールドの個別の公開オプションの値を変更することなく、4D Mobileでのテーブルを公開・または非公開にすることができます。
このオプションは"4D Mobile"昨日のコンテキストの中で使用することができます。詳細な情報に関しては、
4D Mobile マニュアルを参照して下さい。
ヌル値の入力を拒否 プロパティはヌル値の格納を防ぐために使用されます。
この属性がフィールドに対して設定されると、そのフィールドにヌル値を格納することができなくなります。この属性が設定されたフィールドがヌル値を受け取ると、エラーが生成されます。
この低レベルなプロパティはSQLのNOT NULL属性に対応します。一般に4Dデータベースでヌル値を使用したい場合、もっぱら4DのSQLランゲージを使用することを推奨します。
注: 4Dにおいて、フィールドに“必須入力”属性を設定できます (後述)。これら2つのコンセプトは同様ですが、しかしスコープが異なります。“必須入力”属性はデータ入力制御であり、“ヌル値の入力を拒否”属性はデータベースエンジンレベルです。
このプロパティは、4Dランゲージでフィールドを扱う際に、空値とヌル値を等しく扱うために使用します。 互換性の理由で、4Dデータベーステーブルに格納されたヌル値は、4Dランゲージで処理される際に自動でデフォルト値に変換されます。例えば以下の文において:
myAlphavar :=[mytable]MyAlphafield
MyAlphafieldフィールドにヌル値が格納されていた場合、myAlphavarには空の文字列 “” が代入されます。 デーフォルト値はデータ型により異なります:
文字およびテキストデータ型: “” 実数、整数、倍長整数データ型: 0 日付データ型: 00/00/00 時間データ型: 00:00:00 ブールデータ型: False ピクチャーデータ型: 空のピクチャー BLOBデータ型: 空のBLOB オブジェクトデータ型: 未定義 他方、この原則のメカニズムはクエリなど4Dデータベースエンジンレベルでの処理には適用されません。実際空値 (例えばmyvalue=0) を検索してもヌル値は見つからず、ヌル値を検索しても空値は見つかりません。両タイプの値 (デフォルト値とヌル値) が同じフィールドの異なるレコードに保存されている場合、追加のコーディングや特定の処理が必要となります。この不便さを解消するため、ヌル値を空値にマップ オプションを使用して4Dランゲージのすべての処理を標準化できます。このプロパティを使用すれば、デフォルト値を使用する原則がすべての処理に拡張されます。ヌル値を格納したフィールドは自動でデフォルト値を格納しているものとして扱われます。
このプロパティはデータベースエンジンの低レベルで適用されます。 特にIs field value Null コマンドの動作に影響を与えます。
注: UUIDフォーマットの文字フィールドではUUIDが生成されていない場合でもNULLとは扱われません (参照)。
“自動インクリメント”プロパティはレコードのユニークIDを生成するために使用されます。この属性は整数、倍長整数、整数64bit型 (4Dのフィールドの型 参照) に使用できます。
このプロパティを持つフィールドは、テーブルにレコードが作成されるたびに、自動で値が増分されます。フィールドに代入される値は、4Dが管理するテーブルの"内部カウンター"に一致します。この内部カウンターには4DコマンドSequence number とGet database parameter 、および#Nマーカー (デフォルト値 参照) を使用してアクセスすることもできます。
代入される数は永久的であり、レコードが削除されても再利用されることはありません。トランザクション中で生成された番号は、トランザクションがキャンセルされると失われます。 しかし、テーブルの内部カウンターはSET DATABASE PARAMETER コマンドを使用して再設定することができます。
“自動インクリメント”プロパティはSQL AUTO_INCREMENT属性に対応し、以下の例題のようにランゲージを使用して設定することもできます。この属性を持つフィールドのインスペクターにはSQL情報エリアにAUTO INCREMENTラベルが表示されます。
以下のコードは"animals"テーブルに整数型の"id"フィールドを作成します:
ARRAY TEXT ($names ;6)
$names {1}:="dog"
$names {2}:="cat"
$names {3}:="penguin"
$names {4}:="snake"
$names {5}:="butterfly"
$names {6}:="ostrich"
Begin SQL
CREATE TABLE animals(
id INT NOT NULL AUTO_INCREMENT ,
name VARCHAR(30)NOT NULL,
PRIMARY KEY(id));
INSERT INTO animals(name)VALUES(:$names);
End SQL
以下のコード:
SELECT * FROM animals;
は以下の値を返します:
id name 1 dog 2 cat 3 penguin 4 snake 5 butterfly 6 ostrich
このオプションメニューはテキスト、BLOB、ピクチャー、そしてオブジェクト型のフィールドで、フィールドデータを格納する場所を指定するために利用できます。以下のオプションから選択できます:
レコード : データは各レコードとともに保存されます。大きなデータを扱う場合、通常このオプションを選択すべきではありません。ただしテキスト型の場合デフォルトでこのタイプが選択されています。これはBツリーインデックスを使用する場合にこのデータ格納タイプを選択していなければならないためです。テキストデータをレコード外に保存するよう設定すると、インデックス選択メニューが非表示になります。データファイル : データはデータファイル内に保存されますが、レコードブロックとは別なエリアに格納されます。BLOBとピクチャーとオブジェクトフィールドではこのオプションがデフォルトで選択されています。テキスト、BLOB、ピクチャー、そしてオブジェクト型の大きなデータをレコードの外に格納することで、データベースの動作を最適化できます。 外部 : データは個別のファイルとして、.4DDファイル外に保存されます。このオプションについてはデータをデータファイル外に保存 で説明しています。 互換性に関する注意: このオプションは、これが選択された後新規に作成されたレコードで有効です。すでに存在するレコードについてはこのオプションは適用されず、この場合、そのテーブルは内部/外部にデータを保存する混合モードで動作することになります。既存のレコードにもこのオプションを適用したい場合、レコードの強制更新 オプションを使用してデータを圧縮してください (圧縮ページ 参照)。
前節で説明したとおり、最適化の目的で、テキスト、BLOB、ピクチャー、およびオブジェクトフィールドのデータをレコードの外あるいはデータファイルの外に保存できます。
上記の設定を行った場合でも、パフォーマンスの理由から、適切なサイズに制限したうえで、データをレコードに保存するよう強制することができます。この機能は、特にアプリケーションが一定でないサイズのBLOB、ピクチャー、テキストまたはオブジェクトデータを扱う際に最適化されます。
この設定は内部ストレージの最大サイズ (バイト) オプションで行います。ここに入力されたサイズ (バイト単位) よりもサイズが小さいデータは格納場所の設定に関わらずレコード内に保存されます。例えばピクチャーフィールドでこの値を30,000バイトに設定した場 合、20 KBのピクチャーはレコード内に保存され、40 KBのピクチャーは上記のオプションで設定した場所に保存されます。デフォルト値は0で、すべてのデータがレコードの外に保存されます。
このプロパティは文字型のフィールドで利用できます。このプロパティは、このフィールドがUUID識別子を格納するためのものであることを示します。格納されるデータはUUIDフォーマットを満たしていなければなりません (32の文字 (A-F, a-f) および数字 (0-9) の組み合わせ)。これを行うために自動UUIDプロパティ、Generate 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との互換性の目的で保持されており、デフォルトでは何の効果もありません。これを使用可能にするためには、アプリケーション内でQuickTimeを有効化する必要があります(ピクチャ を参照して下さい)。
このプロパティはテキストおよび文字フィールドで利用できます。このオプションを選択すると、フィールドに格納されたデータに対するクエリーや並び替えはスタイルタグを考慮しなくなります。
このオプションはフォーム中のテキストエリアのデータに異なるスタイルを適用する4Dの能力に関連します。この機能に関する詳細はGET DATA SOURCE LIST を参照してください。
スタイルの設定はテキストにHTMLタグを挿入することで行われます。これらのタグはテキストエリアが表示される際に解釈されます。
スタイルタグはデータとともに格納されます。例えばテキストフィールドに"week end "と入力すると、4Dは"week <SPAN STYLE = "color: #D81E05">end</SPAN>"を格納します。この処理はフォームレベルでユーザーに対し透過的です。しかしクエリーや並び替えにおいては、スタイルタグを無視するよう4Dに指示するために特別な設定が必要です。先の例で"week end"を検索するためには、巣とr買う茶ーエディターでフィールドに対しテキストのクエリや並び替えでタグを使用しない オプションを選択する必要があります。
注: このオプションが設定されている場合、4Dで次のコードによりthefield からthevalue の値を検索するのと同じです。:
インデックス プロパティはBLOBとピクチャーを除くすべてのフィールド型で利用できます。キーワードインデックス プロパティは文字、テキストおよびピクチャーフィールドで利用できます。
インデックスを使用すると、データ間の処理や検索の速度を向上させることができます。
インデックスの管理についてはインデックスの作成と変更 で説明しています。
データ入力制御はフォームレベルでフィールドや入力可オブジェクトに対し設定できます。データ入力制御はフォーム上のフィールドや入力可オブジェクトに、ユーザーが入力できるものを制限します。
フィールドに必須入力 属性が設定されていると、データ入力時にユーザーはそのフィールドに値を入力しなければなりません。4Dは必須入力フィールドが空である場合、そのレコードを受け入れません。必須入力はデータベース中で必須の情報を格納するフィールドに設定します。レコードをユニークに識別するためのフィールドは、必須入力を設定すべき良い例です。社会保障番号、請求番号、従業員番号などには必須入力属性を設定して、レコードの整合性を保護することができます。
この属性は特定のフォームのフィールドに対して設定することもできます。ストラクチャーエディターで必須入力 属性を選択すると、フォームごとにそれを解除することはできません。他方、ストラクチャーエディターでこの属性が設定されていない場合に、フォーム上で必須入力 属性を適用することは可能です。フォームでフィールドに必須入力属性を設定することに関しては、“入力可および必須入力属性を設定する”を参照してください。
注: 4Dにおいて、フィールドには"ヌル値の入力を拒否"プロパティを設定することができます (前述)。2つのコンセプトは同様ですが、スコープが異なります。“必須入力”属性はデータ入力制御であり、“ヌル値の入力を拒否”属性はデータベースエンジンレベルで動作します。
Iフィールドにこの属性が設定されていると、4Dはフィールドに最初に入力された値を受け入れますが、レコードが保存された後は、ユーザーがそれを変更することを許可しません。ユーザーは最初にレコードが作成されるとき、レコードが保存される前までしか、入力を編集することはできません。レコードが保存されると、フィールドの値は編集できなくなります。その後、値はメソッドあるいはデザインモードでこのオプションを取り除いた後でのみ、編集可能です。
修正不可は会計監査の支払日等を格納するフィールドに使用されます。修正不可はしばしばテーブル中のレコードをユニークに識別するためのフィールドに使用されます。
注: この属性はページモードで詳細フォームに表示されるフィールドに対して動作します。他のケース (リスト入力、リストあるいはページモードのサブフォーム中への入力) では、フィールドの値は編集可能です。
表示のみ が設定されたフィールドには、ユーザーはキーボードから値を入力することはできません。そのようなフィールドにはデフォルト値を設定するか、フィールドに値を挿入するコードを書かなくてはなりません。表示のみ属性を持つフィールドは、計算された総計やメソッドで割り当てられて一連番号など、ユーザーに編集させたくない値を表示する際に便利です。
特定のフォームに対して、フィールドを入力不可に設定することもできます。フォーム上のフィールドを入力不可に設定する方法は、“入力可と必須入力属性を設定する”を参照してください。
このオプションはテキストフィールドで利用できます。このオプションがチェックされていると、そのあとに作成されたフォームで、テキストフィールドは自動で複数行のテキストを受け入れるよう設定されます。この場合のデフォルトの特徴は以下の通りです:
複数行に対応した高さ 水平スクロールバー 実行時、改行キーにより改行が挿入される このオプションがチェックされていないと、フォーム上のテキストフィールドのデフォルトアピアランスは文字フィールドと同じです。一行分の高さでスクロールバーがなく、改行キーによりフォーム中の次のオブジェクトに移動します。
フォームエディターでこれらのアピアランスについてはいつでも変更できます。
項目選択を使用する 属性を使用すると、フィールドに情報を入力する際、選択リストが表示されます。この属性を使用するためには、まずリストエディターを使用して選択リストを作成する必要があります (リスト 参照)。 特定のフォーム上でフィールドに対し選択リストを割り当てることができます。しかしフォーム上だけで選択リストを割り当てると、そのリストはクエリーエ ディターなど他のエディターやダイアログボックス上では表示されません。フォームで選択リストを使用する方法についてはデータ入力の制御と補助 を参照してください。 注 : フォームレベルで指定リストや除外リストを設定することもできます。項目選択を使用するオプションをチェックしたら、メニューから作成済みの選択リストを選択します。[... ]ボタンをクリックすると、直接リストエディターにアクセスできます (リスト 参照)。
フィールドにヘルプTipを追加して、ユーザーにフィールドに関する追加の情報を提供することができます。TipがヘルプTipエリアに入力されると、ユーザーがフォーム上でそのフィールド上にカーソルを合わせるとTipがフィールドの隣に表示されます。ヘルプTipはすべてのプラットフォーム上で表示されます。
ユーザーがマウスポインターをフィールド上に重ねると、tipは以下のように表示されます:
特定のフォーム上でTipを使用することもできます。特定のフォームのみにTipを割り当てると、それは他のフォーム上では表示されません。フォームにTipを割り当てる方法についてはヘルプメッセージ を参照してください。
インスペクターパレットのコメント欄はフィールドに関する追加情報を格納するために使用できます。このコメントはすべてのデベロッパーに対して表示されます。 テーブルやリレーションも各々コメントエリアを持っています。
インスペクターパレットのSQLエリアには、SQLランゲージからそのフィールドを参照する際の有用な情報が表示されます。
このエリアには特に、指定された名前がSQLの命名規則に沿っているかどうかが表示されます (例えば4Dと異なりSQLは名前にスペースが含まれることを許可しません)。
注: SQLには予約語の一覧も定義されており、これにはSQL関数やSQLキーワードも含まれます。これらの予約語はメソッドエディターのリストエリア で見ることができます。
フィールドでは、SQL情報エリアにはSQL属性も表示されます (型やプロパティ)。