従来のやり方では、SET EXTERNAL DATA PATHコマンドを使うことによって、ピクチャーや BLOB をデータファイルの外に置くことができました。このコマンドは ORDA に適応していないため、v20 R3 では同様の機能を追加することにしました: Blob およびピクチャー属性に、ファイルへの参照を割り当てる機能です。詳しく説明しましょう。
まず最初に、このコードを見てみましょう:
$myRecord:=ds.MyTable.new()
$myRecord.image:="C:/FolderWithMyFiles/myImage"
$myRecord.binary:="C:/FolderWithMyFiles/myBinary"
$myRecord.save()
上の image属性と binary属性は、それぞれピクチャー属性および Blob属性です。実際のピクチャーや BLOB の代わりにファイルパスを割り当てることで、4D は指定されたパスのみをデータファイルに格納します。ピクチャーや BLOB を実際に使用するときだけ、4D はディスクからファイルを読み込み、適切なピクチャーや BLOB変数を作成します。この処理は完全に透過的におこなわれます。
メリットと注意事項
この方法にはいくつかの利点があります:
– データファイル内にバイナリファイルを保存しないため、データファイルをより小さく、より管理しやすくできます。
– ファイルを重複保存せずに、複数のレコードに同じファイルを使用できます。
– ファイルを好きなように整理し、4D以外のソフトウェアで使用することもできます。
しかし、注意点もあります:
– 4D はディスク上のファイルを必要とします。4D がいつでもアクセスできるようにしておかなければなりません。
– ピクチャーや Blob属性にパスを割り当てると、データベースストラクチャーの “格納場所” フィールドプロパティをバイパスします (“格納場所” プロパティは、ピクチャーや BLOB コンテンツの保存先 (データファイルか外部データファイル) を指定します)。
POSIXパスまたは 4D.File
上述のコードでは、属性に POSIXパスを割り当てています (POSIXパスのみ使用できます) が、下の例のように 4D.File を割り当てる方法もあります:
$file:=File("/PACKAGE/FolderWithMyFiles/myImage")
$myRecord:=ds.MyTable.new()
$myRecord.image:=$file
$myRecord.save()
このコードは 4D.File のパスを属性に割り当てます。
ディスク上のファイルを変更した場合は?
これは少々やっかいな問題です。4D は BLOB やピクチャーのコンテンツをキャッシュに保存するため、アプリケーションを再起動するまで、変更は反映されないかもしれません。もし、本当にランタイムでファイルを変更したいのであれば、1つのコツがあります: パスをもう一度属性に割り当てることです。新しい値を検出すると、4D はキャッシュを削除し、次にピクチャーや BLOB を使用するときに新しいファイルを取得します。
注記: Qodly やデータエクスプローラーなど、ピクチャーや BLOB にブラウザーからアクセスする場合は、ブラウザーのキャッシュも忘れずにクリアする必要があります。
ご質問がある場合はフォーラムをご利用ください
この新機能の使用方法については、ドキュメントをご覧ください。また、ご質問やご意見がありましたら、遠慮なくフォーラムまでお寄せください!