VARIABLE TO BLOB

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 6.0


VARIABLE TO BLOB (variable; blob{; offset | *})

引数説明
variable変数BLOBに格納する変数
blobBLOB変数を受け取るBLOB
offset | *変数 | *BLOB内のオフセット (バイト単位)
または値を追加する場合 *
*でない場合、書き込み後の新しいオフセット

説明

VARIABLE TO BLOBコマンドは、variableblobに格納します。

オプション引数 * を指定した場合には、変数はBLOBの最後に追加され、これに合わせてBLOBのサイズも拡張されます。オプション引数 * を使用すれば、BLOBがメモリ容量内であれば変数やリスト(他のBLOBコマンドを参照してください)をいくつでも順番にBLOBの中に格納できます。

オプション引数 * やoffset変数引数を指定しない場合、変数はBLOBの先頭に格納され、それ以前にそこにあった内容を上書きします。これに合わせてBLOBのサイズも調整されます。

offsetに変数引数を渡すと、変数値のオフセット位置(ゼロから始めます)からBLOBに書き込まれます。変数を書き込む位置にかかわらず、BLOBのサイズは渡した場所に応じて増やされます (必要に応じ変数のサイズも)。新しく割り当てられたバイトは、ゼロに初期化されます。

呼び出し後、offset変数引数は書き込まれたバイト数だけインクリメントされます。その後同じ変数を他のBLOB書き込みコマンドで使用してさらに変数やリストを書き込めます。

VARIABLE TO BLOBコマンドは、以下のものを除いて、どのようなタイプの変数でも(他のBLOBも)受け付けます:

・ポインタ

・ポインタ配列

・二次元配列

ただし、階層リスト (ListRef) への参照である倍長整数の変数を格納した場合には、VARIABLE TO BLOBコマンドは階層リストではなく倍長整数変数を格納します。BLOB内に階層リストを格納、またはBLOBから階層リストを取り出すには、LIST TO BLOBBLOB to listを使用します。

警告: 変数を格納するためにBLOBを使用したら、格納されたBLOBの内容を読み出すにはBLOB TO VARIABLEコマンドを使用しなければなりません。変数は4D内部形式を使用してBLOBに格納されるためです。

呼び出し後、変数が正常に格納された場合には、システム変数OKは1に設定されます。変数を格納するために必要なメモリがない等の理由で処理が実行できなかった場合には、システム変数OKは0に設定されます。

プラットフォーム独立性に関する注意: VARIABLE TO BLOBBLOB TO VARIABLE は4Dの内部フォーマットを使用してBLOBに格納された変数を取り扱います。この利点として、これら二つのコマンドを使用する際、プラットフォーム間のバイトスワップを気にする必要はありません。言い換えればこれらのコマンドを使用してWindowsで作成されたBLOBをMacintoshで使用する、あるいはその逆を行うことができます。

例題

1. 以下の2つのプロジェクトメソッドを使用すると、ディスク上のドキュメントへすばやく配列を格納、またはドキュメントからすばやく配列を取得できます:

      ` SAVE ARRAY project method
      ` SAVE ARRAY ( String ; Pointer )
      ` SAVE ARRAY ( Document ; -> Array )
   C_STRING (255;$1)
   C_POINTER ($2)
   C_BLOB ($vxArrayData)
   VARIABLE TO BLOB ($2->;$vxArrayData)  ` Store the array into the BLOB
   COMPRESS BLOB ($vxArrayData)  ` Compress the BLOB
   BLOB TO DOCUMENT ($1;$vxArrayData)  ` Save the BLOB on disk

      ` LOAD ARRAY project method
      ` LOAD ARRAY ( String ; Pointer )
      ` LOAD ARRAY ( Document ; -> Array )
   C_STRING (255;$1)
   C_POINTER ($2)
   C_BLOB ($vxArrayData)
   DOCUMENT TO BLOB ($1;$vxArrayData)  ` Load the BLOB from the disk
   EXPAND BLOB ($vxArrayData)  ` Expand the BLOB
   BLOB TO VARIABLE ($vxArrayData;$2->)  ` Retrieve the array from the BLOB

上記のメソッドをアプリケーションに追加すれば、以下のように記述することができます:

   ARRAY STRING (...;asAnyArray;...)
      ` ...
   SAVE ARRAY ( $vsDocName;->asAnyArray)
      ` ...
   LOAD ARRAY ( $vsDocName;->asAnyArray)

2. 以下の2つのプロジェクトメソッドを使用すると、任意の変数(1〜n個)をすばやく、BLOBへ格納/復元することができます:

      ` STORE VARIABLES INTO BLOB project method
      ` STORE VARIABLES INTO BLOB ( Pointer { ; Pointer ... { ;  Pointer } } )
      ` STORE VARIABLES INTO BLOB ( BLOB { ; Var1 ... { ; Var2 } } )
   C_POINTER (${1})
   C_LONGINT ($vlParam)

   SET BLOB SIZE ($1->;0)
   For ($vlParam;2;Count parameters)
      VARIABLE TO BLOB (${$vlParam}->;$1->;*)
   End for


      ` RETRIEVE VARIABLES FROM BLOB project method
      ` RETRIEVE VARIABLES FROM BLOB ( Pointer { ; Pointer ... { ;  Pointer } } )
      ` RETRIEVE VARIABLES FROM BLOB ( BLOB { ; Var1 ... { ; Var2 } } )
   C_POINTER (${1})
   C_LONGINT ($vlParam;$vlOffset)

   $vlOffset:=0
   For ($vlParam;2;Count parameters)
      BLOB TO VARIABLE ($1->;${$vlParam}->;$vlOffset)
   End for

これらのメソッドをアプリケーションに追加すれば、以下のように記述することができます:

   STORE VARIABLES INTO BLOB ( ->vxBLOB;->vgPicture;->asAnArray;->alAnotherArray)
      ` ...
   RETRIEVE VARIABLES FROM BLOB ( ->vxBLOB;->vgPicture;->asAnArray;->alAnotherArray)

参照

BLOB to list, BLOB TO VARIABLE, LIST TO BLOB.

システム変数またはセット

変数が正しく格納されるとOK変数に1が、そうでなければ0が設定されます。


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次