4Dは、BLOB(Binary Large OBjects)データタイプをサポートします。
BLOBフィールドおよびBLOB変数は、以下のように定義できます。
- BLOBフィールドを作成するには、インスペクターウィンドウ内のフィールドタイプドロップダウンリストでBLOBを選択します。
- BLOB変数を作成するには、コンパイラー宣言コマンドC_BLOBを使用します。BLOB型のローカル、プロセス、インタープロセス変数を作成できます。
注: BLOBの配列はありません。
4Dの中で、BLOBは連続した可変長バイトであり、1つのまとまったオブジェクトまたは各バイトが個々にアドレス指定できるオブジェクトとして取り扱うことができます。BLOBは空(長さがNULL)でもよく、また最大2,147,483,647バイト(2GB)まで含むことができます。
BLOBは全体がメモリにロードされます。BLOB変数はメモリ内にだけ保持され、存在します。BLOBフィールドは、そのフィールドが属するレコードの他の部分と同様に、ディスクからメモリにロードされます。
大量のデータを保持できる他のフィールドタイプ(ピクチャー)と同様に、レコードを更新してもBLOBフィールドはメモリに複製されません。その結果、OldおよびModifiedコマンドをBLOBフィールドに適用しても、返される結果は意味を持ちません。
BLOBには、どのような種類のデータでも保持できるため、画面上でのデフォルトの表現はありません。フォーム内でBLOBフィールドまたは変数を表示すると、どのような内容であっても常に空白になります。
BLOBフィールドを使用すると、最大で2GBまでのあらゆる種類のデータを保存できます。BLOBフィールドにインデックス付けすることはできないため、BLOBフィールドに保存された値のレコードを検索するには、式を使用しなければなりません。
4DのBLOBは、4Dコマンドまたは4Dプラグインの引数として渡すことができます。BLOBをユーザーメソッドのパラメーターとして渡したり、関数の戻り値にすることもできます。
ポインターを使用して、BLOBをメソッドに渡すことも出来ます。BLOBへのポインターを定義し、ポインターをパラメーターとして渡します。
例題:
C_BLOB(anyBlobVar)
SET BLOB SIZE(anyBlobVar;1024*1024)
$errCode:=Do Something With This BLOB(anyBlobVar)
C_BLOB(retrieveBlob)
retrieveBlob:=Fill_Blob(anyBlobVar)
COMPUTE BLOB(->anyBlobVar)
プラグイン開発者への注意: BLOB引数は“&O”(数字の0ではなく、アルファベットの"O")として宣言されます。
BLOBを相互に代入できます.
例題:
ただし、BLOBに演算子を適用することはできません。BLOBタイプの式はありません。
中カッコ{...}を使用し、BLOBの各バイトを個別にアドレス指定できます。BLOB内では、各バイトに0 から N-1の番号が割り当てられています。NはBLOBのサイズです。例えば:
BLOBの各バイトはすべて個別にアドレス指定できるため、BLOBフィールドまたは変数に格納したいものは実際何でも格納できます。
4DはBLOBに使用する以下のコマンドを提供します:
これらのコマンドについては、この章で説明しています。
追記: