Example - Using a BFile LOB Locator

Top  Previous  Next

BFile LOBを使って、データベースサーバー上のファイルを読み込むことが出来ます。BFile LOBはサーバー上のファイルを指定するためのdirectoryfilenameプロパティを持っています。 データを選択することは別として、新しいTLOBLocatorインスタンスを作成でき、ファイル名とディレクトリをそれに割り当て、SQLを使わずにファイルにアクセスできます:

var LOB: TLOBLocator;

   Buffer: array[0..99] of Byte;

begin

// Create a new BFile

LOB := TLOBLocator.Create(MainSession, otBFile);

// Assign a directory alias and filename

LOB.Directory := 'DATA_DIR';

LOB.Filename  := 'X100.DAT';

// Read the first 100 bytes

if LOB.FileExists then LOB.Read(Buffer, 100);     

LOB.Free;

end;

 

ディレクトリはエイリアス(小文字・大文字を区別します!)で、SQL命令のcreate directoryを使ってサーバー上に作られたものでなくてはなりません。FileExistsメソッドは、ファイルがサーバー上のディレクトリに存在するかどうかを示します。もしディレクトリのエイリアスが存在しなかったら、例外が発生します。

データベース内のBfileカラムのディレクトリかファイル名を設定するには、SQL関数のBfilenameを使ってください。例えば:

update filetable set filecolumn = bfilename(:directory, :filename)

 

また、Bfile LOB Locatorを作成して、directoryfilenameプロパティを設定して、それをupdateinsert命令の変数と関連付けて、それらを実行することが出来ます:

var LOB: TLOBLocator;

begin

// Create a new BFile

LOB := TLOBLocator.Create(MainSession, otBFile);

// Assign a directory alias and filename

LOB.Directory := 'DATA_DIR';

LOB.Filename  := 'X100.DAT';

// Set the LOB variable

LOBQuery.SetComplexVariable('filecolumn', LOB);

// update filetable set filecolumn = :filecolumn

LOBQuery.Execute;

LOB.Free;

end;