4D v16.34Dのフィールドの型 |
|||||||||||||||||||||||||
|
4D v16.3
4Dのフィールドの型
4Dのフィールドの型
フィールドごとにフィールド型を指定しなければなりません。フィールド型は、4Dがフィールドのデータをどのように処理・格納するか、またフォーム上でのデータの入力や表示に影響します。 フィールド型を変更するには:
フィールド型は、フィールドにリレーションが設定されている、あるいは主キーに属する場合を除き、いつでも変更できます。これらのケースに該当する場合、フィールド型を選択するメニューは無効となります。フィールド型を変更するにはまずリレーションおよび主キーを取り除かなければなりません。 ピクチャーフィールドを他の型に変換した場合、そのデータは表示されません。その逆も同様です。 デフォルトで4Dは以下のフィールド型をサポートします:
(1) これらの型は4DのSQLエンジンでのみ利用されます。これらのフィールドを4Dランゲージで使用すると、これらの値は内部的に実数に変換されます。 注: "文字列"という用語は文字あるいはテキストタイプを示し、"数値"は正数、倍長整数、整数64bit、実数またはフロート型を示します。 文字フィールドには文字 (文字と数字)、句読点、そしてアスタリスク (*) やパーセント (%)、ハイフン (-) などの記号を格納できます。255文字長を超えない、テキストとして扱われるべき情報を格納する場合に文字フィールドを使用します。 文字フィールドには標準インデックスあるいはキーワードインデックスを割り当てることができます。インデックスについてはインデックスの作成と変更を参照してください。 文字は最も一般的なタイプです。典型的にこのフィールド型は名前、住所、電話番号、郵便番号などに使用します。データ入力時、文字フィールドはすべての文字、数字、句読点、記号を受け入れます。 郵便番号には2つの理由で文字フィールドを使用します: 数値フィールドは先頭の0を表示せず、また郵便番号にはハイフンが含まれます。数値フィールドタイプと文字フィールドタイプどちらを使用するかは、数値としての計算を行うか、または数値としての並び替えを行うかどうかで決定します。 文字フィールドに格納できる最大文字長として、1から255を設定できます。 2つ以上の文字フィールドを結合することができます。例えば人名の姓と名をラベルフォームに印刷したい場合などです。メソッドでは以下のように記述します: FullName:=[Employees]FirstName+" "+[Employees]LastName 変数FullNameを表示したり印刷したりできます。あるいは情報の一部だけを別な変数にとりだすこともできます。 テキストフィールドはいくつかの点を除き、文字フィールドと同じです。 テキストフィールドには2GBまでの文字データを格納できます。一般的にテキストフィールドはコメントや説明など長い文章を保持するために使用します。 最適化のため、テキストフィールドの内容はレコードの外に保存することができます (フィールドプロパティの"レコードに格納"参照)。この場合フィールドに標準のインデックスを割り当てることはできません。文字フィールドと同様、テキストフィールドにはキーワードインデックスを割り当てることができます。インデックスについてはインデックスの作成と変更を参照してください。 詳細フォーム中で、テキストフィールドにスクロールバーを表示させることができます。印刷するレポートでは、すべての情報が印刷されるようテキストフィールドの大きさを (複数ページにわたって) 拡張できます。 データ入力中、テキストフィールドは基本的な編集機能 (スクロール、エリア中でのワードラップ、ダブルクリックでの文字の選択、矢印キーでの挿入ポイントの移動、そして標準のカット/コピー/ペースト処理) を提供します。複数行オプションが選択されていると、データ入力中テキストフィールドは改行を受け入れます (文字フィールドは受け入れません)。フォームオブジェクトプロパティでマルチスタイルオプションが設定されている場合、フィールドの内容を下線やボールド、フォントやサイズ、カラー指定などのスタイル付きテキストとして表示させることもできます。 テキストフィールドにワープロソフトなどからテキストをペーストできます。 注: テキストをレコードに格納する別の方法として4D Writeプラグインがあります。4D Writeでは、異なるフォント属性、段落揃えなど、標準のテキストフィールドでは利用できない他のワープロ機能を使用できます。他の4Dプラグインと同様、4D Writeエリアのデータはテキスト型ではなくBLOB型のフィールドに格納されます。4D Writeの利用に関する詳細は、 4D Write Language Referenceマニュアルの4D Writeランゲージの紹介等を参照してください。 開始日、購入日、誕生日などの日付データを格納する場合に日付フィールドを使用します。日付フィールドは100年から32,767年までの間の日付 (年/月/日) を格納することができます。 注:
現在時刻、開始時刻、継続時間など時間を管理する際に時間型を使用します。時間フィールドにはHH:MM:SSフォーマットで入力された時間を格納できます。 ブールフィールド (論理フィールドと呼ばれることもあります) はTRUEまたはFALSE値を格納することができます。 ブールフィールドはチェックボックスあるいは2つペアのラジオボタンとしてフォーマットできます。チェックボックスではチェックされている状態がTRUE、されていなければFALSEです。ラジオボタンの場合、最初のラジオボタンが選択されていればTRUE、二番目が選択されていればFALSEです。 ブールフィールドには質問になるようなの名前を付けることができます。検索時には質問の答えがTRUEまたはFALSEでデータベース中のブールフィールドを検索できます。例えばブールフィールドに"Gender"ではなく“Male”と名前を付けます。この場合、"Gender is equal to TRUE"ではなく、"Male is equal to TRUE"という検索条件を書けます。 整数フィールドには-32,768から32,767までの、小数点を含まない整数値を格納できます。 倍長整数フィールドは、整数型にはおさまらない整数値を格納するために使用します。小数を含まない ±2,147,483,647の値を格納できます。 この型のフィールドは8バイトを使用し、とても大きな整数 (+/- 2E64) を格納するために使用できます。 注: この型のフィールドは4DのSQLエンジンのみで使用されます。このフィールドが4Dランゲージで使用されると、内部的に実数に変換されます。 実数フィールドには小数点を含む実数値を格納します。実数フィールドには小数を含む±1.7E±308の値を格納できます。 注: 4Dデータベースエンジンでは、十分な正確性を確保するために、実数の比較は常に10^-6 の epsilon 値を用いて行われます。データと計算の一貫性を保つために、 epsilon 値は変更することができません。具体的には、データベースエンジンは SET REAL COMPARISON LEVEL コマンドの影響を受けず、このコマンドは4Dランゲージ内で実行される処理のみに影響するという事です。実数で実行される計算特有の不正確性のため、実数型は、識別子などの正確な値を保存するために使用する事は推奨されません。 このフィールドは浮動総数点数を格納するために使用します。この型の数値は精度を失うことなく、実数値を格納することができます。 注: この型のフィールドは4DのSQLエンジンでのみ使用されます。このフィールドが4Dランゲージで使用されると、値は内部的に実数に変換されます。 Blob (Binary Large Object) フィールドはあらゆる種類のバイナリーデータを格納するために使用されます。例えば他のアプリケーションで作成されたドキュメント、スキャンしたピクチャー、あるいは他のアプリケーションを格納できます。BLOBには2GBまで格納できます。BLOBフィールドを含むレコードを処理する際、BLOB全体がメモリーにロードされます。 BLOBフィールドを使用してドキュメント管理システムを作成し、ユーザーのリクエストに応じてそれを配信するといったことができます。 4DのBLOBコマンドを使用してBLOBフィールドを管理できます。 DOCUMENT TO BLOB とBLOB TO DOCUMENTコマンドを使用してBLOBフィールドにドキュメントを読み込んだり、ドキュメントを書き出したりできます。 COMPRESS BLOB、EXPAND BLOB、およびBLOB PROPERTIESコマンドを使用して、BLOBを圧縮できます。BLOBの処理に関する詳細は、4D Language ReferenceマニュアルのDISABLE MENU ITEMを参照してください。最適化のため、BLOBはレコードの外に保存されます。BLOBは必要な時にのみロードされます。例えば検索されたレコードを一件ロードする際などです。 BLOBはあらゆるタイプのデータを表現できるため、BLOBフィールドの内容をスクリーンに表示することはできません。 ピクチャーフィールドにはグラフィックアプリケーションを使用して作成されたデジタル化された写真、図表、地図、イラストなどを格納できます。ピクチャーはネイティブフォーマットで格納されます。ピクチャーにはPostScript™や (4D v12以降は) メターデータなど出力デバイスに特別な指示を与えるための追加の情報が格納されていることがあります。この情報はピクチャーがピクチャーフィールドにコピーされる際に一緒に格納され、4Dが対応するデバイスでピクチャーを印刷する際、あるいはメタデータの場合はGET PICTURE METADATAやSET PICTURE METADATAで使用できます。 最適化のため、ピクチャーはレコードの外に保存されます。ピクチャーは必要な時にのみロードされます。例えば検索されたレコードを一件ロードする際などです。4D v13より、ピクチャーをデータファイルの外に保存できるようにもなりました (データをデータファイル外に保存参照)。 4D v13 ではフィールドに格納された各ピクチャーごとにデフォルト名を記録できます。つまりユーザーによる書き出しやWRITE PICTURE FILEコマンド等を (fileName 引数に空の文字列を渡して ) 使用してピクチャーフィールドの内容をディスクに保存する際に使用されるデフォルトのファイル名を設定できます。フィールドの内容を変数や他のフィールドにコピーした場合、デフォルト名もコピーされます。 ピクチャーフィールドに格納されるピクチャーのデフォルト名を設定する方法は2つあります:
これは以下のように動作します:
オブジェクトフィールドには、異なる種類の属性/値のペアを、どんなデータスキーマでも保存することができます。保存されたデータの構造は必ずしも他のレコードと同じであるとは限りません。例えば、[Person]という住所のオブジェクトフィールドには、都市や国等によって、異なる属性を含むことができます: record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...} record2= {"street1":"Umber Road", "Number":"28", "state":"MO",...} 4Dオブジェクトのストラクチャーは標準の”属性/値”ペアの原理に基づいています。これらのオブジェクトのシンタックスはJSON記法に基づいていますが、完全に従っているわけでもありません:
警告: 属性名は大文字と小文字を区別するという点に注意して下さい。 オブジェクトファイルは最大で2GBまでです。オブジェクトフィールドを含むレコードを使用しているとき、オブジェクト全てがメモリーへと読み込まれます。ちょうどテキスト、ピクチャーやBLOBフィールドのように、オブジェクトフィールドもデータファイル内部(レコード内、またはレコード外)に、またはデータファイル外に保存することができます。このオプションについてはデータをデータファイル外に保存 の章に詳細があります。 オブジェクトフィールドを管理するためには4Dのオブジェクト(ランゲージ) コマンドを使用して下さい。オブジェクトフィールドからのデータの読み出し、書き込みについてはOB Get と OB SET コマンドを使用して下さい。また、OB SET ARRAY と OB GET ARRAY コマンドを使用することで配列を属性として保存・読み出しができます。
専用のQUERY BY ATTRIBUTE、QUERY SELECTION BY ATTRIBUTE、DISTINCT ATTRIBUTE VALUESコマンド、あるいはDISTINCT ATTRIBUTE PATHSコマンドを使用してオブジェクトフィールド内のクエリや処理を実行することができます。 オブジェクトフィールドはテキストベースなので、オブジェクトフィールドの中身は4DフォームにおいてはデフォルトでJSONにフォーマットされたテキストとして表示されます(以下の章を参照して下さい)。 注: JSONオブジェクトを扱うためには、"JSON" テーマのコマンドを使用して下さい。 オブジェクトフィールド型を使用すると、スキーマレスでダイナミックなフィールドを定義することができます。これらのオブジェクトフィールドは"ユーザー定義の"、または"カスタムの"フィールドとみなすこともできます。4D では、スキーマデータモデルとスキーマレスデータモデルの二つの選択肢があります。どちらの場合においても、インデックス付きの速いクエリを実行することができます。 また、オブジェクトフィールドはデータモデルを単純化することもできることに注意して下さい。例えば、よくある"Contacts"というテーブルについて、一つのオブジェクトフィールドがあるだけで、可能性がある、ありとあらゆる値をのために無数にフィールドを作成する必要がなくなります(またそのようなフィールドは90%の割合で結局のところ使用されません)。情報モデルは必要に応じてオン・ザ・フライで作成することが可能です。 オブジェクト(ランゲージ)テーマ内の全てのコマンドは第一引数(object)としてオブジェクトフィールドを受け入れるようになりました。 標準のランゲージオブジェクトの様に、オブジェクトフィールド値はオブジェクト(ランゲージ)テーマのコマンドを使用して管理することができます。例えば: // 値を設定するには 配列もまたサポートされます。例えば: ARRAY TEXT($arrGirls;3) オブジェクトフィールドの属性への編集を保存するためには、ほとんどの場合において、レコードを保存する前に4Dに明示的に変更を通知する必要があります。この通知とはオブジェクトフィールドを自分自身へと再割り当てすることで実行されます: [Persons]Identity_OB:=[Persons]Identity_OB //4Dに強制的にフィールドの中身を更新させる オブジェクト参照は、アプリケーション内の他の場所(他のオブジェクトフィールドなど)でも使用される可能性もあるため、このステップは必要になります。4Dランゲージは、オブジェクトフィールドの属性が変更されていたとしてもそれをレコードの保存時に検知することはできません。 属性が変更された場合には、直ちにそのフィールドを再割り当てし、その中身を保存する必要があります:
注: OB SET コマンドを使用して第1階層の属性を管理する場合には、フィールドの再割り当ては必要ありません: OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue") //第1階層属性へアクセス オブジェクトフィールドはフォーミュラの中で使用することができます(標準のフォーミュラエディタ、またはEXECUTE FORMULA コマンドを使用します)。しかしながら、このコンテキストにおいては、オブジェクトフィールドは以下のコマンドの使用でしか扱う事ができません: 例えば、以下のクエリフォーミュラを実行することができます: OB Get([Rect]Desc;"color")="blue" デフォルトで、オブジェクトフィールドは4D フォーム内ではテキストエリアとして表示されます。これらのエリアのうち、オブジェクトデータは、未定義か、またはJSONテキストとしてフォーマットされている必要があります。そうでない場合には、エラーが返されます。 例えば、[Rect]Descというフィールドをオブジェクトフィールドとして定義した場合、以下のように書くことができます: CREATE RECORD([Rect]) [Rect]Descフィールドがフォーム内に含まれているとき、以下の内容が表示されます: テキストフィールド内にて表示されている値を直接編集することもできますし、標準のオブジェクト記法を使用してオブジェクトデータを直接入力することもできます。[Tab] キーを押すと、オブジェクトは自動的にJSON形式にフォーマットされます: しかしながら、直接編集する際には細心の注意を払って行うべきです。何故なら、誤った場所に入った空白や記号などは、JSON解析エラーとなり、編集したデータは保存されないからです: 一般的には、オブジェクト(ランゲージ) と JSONコマンドを通してオブジェクトフィールドの中身を管理する方がより正確です。 ほとんどの4D標準の機能は、オブジェクトフィールドのデータの方に限らずサポートします。しかしながら、アプリケーション内のいくつかの特殊な部分においては、現在のリリースにおいてはオブジェクトフィールドに未対応な部分もあります。これらの部分は将来のリリースにおいてアップデートされ、徐々に使用可能になって行く予定です。 以下の機能またはコマンドは、4Dフォーミュラを通して部分的にオブジェクトフィールドをサポートします:
以下の4Dの機能やコマンドは、オブジェクトフィールドをサポートしません:
|
プロパティ
プロダクト: 4D
履歴
変更: 4D v15 ARTICLE USAGE
デザインリファレンス ( 4D v16) |
|||||||||||||||||||||||