Pengambilan dan Penyimpanan Data Blob
Untuk sisi aplikasi, ada 2 cara penyimpanan dan pengambilan data BLOB ini. Cara pertama menggunakan persistent field, i.e. kamu buat field2 di dataset kamu menggunakan Fields Editor (double klik dataset kamu aja, pasti tampil), dan cara kedua dengan dynamic field.
Secara umum cara pertama lebih mudah. Berikut kodenya:
(*************************************************************************
Diasumsikan ada ADODataset bernama tblMyFiles yang berisi 3 buah persistent field
bernama tblMyFilesID (utk field bernama 'ID'), tblMyFilesName (utk field bernama 'Name'),
dan tblMyFilesBin (utk field bernama 'Bin')
Field 'ID' cuma buat identity saja (primary key) bertipe int(eger)
Field 'Name' buat nampung nama aslinya file yang disimpan
Field 'Bin' buat nampung isi file
*************************************************************************)
// AFileName harus sudah berisi nama file yang valid yang ingin disimpan di database
Procedure TForm1.StoreMyFile(Const AFileName: String);
Begin
// anggap lah kita mau nambah reccord baru, utk yang lain pake edit
tblMyFiles.Append;
// simpan nama asli file ybs, strip the path portion
tblMyFilesName.Value := ExtractFileName(AFileName);
// simpan isi file nya
tblMyFilesBin.LoadFromFile(AFileName)
// simpan
tblMyFiles.CheckBrowseMode;
End;
// Di sini kita mengambil isi field 'Bin' dari record yang sedang aktif dan
// mengembalikannya sebagai file di direktori 'C:\MyFiles'
Procedure TForm1.GetMyFile;
Begin
tblMyFilesBin.SaveToFile('C:\MyFiles\' + tblMyFilesName.Value);
End;
Cara kedua sedikit ribet, melibatkan penggunakan Stream (TADOBlobStream, atau kombinasi TBlobStream dan TFileStream), hanya bermanfaat jika kamu tidak mau menggunakan metode Persistent Field. Seperti pada kasus penggunaan sebuah dataset secara bersama. Dimana tipe2 field yang akan diambil tidak bisa langsung ditentukan pada saat design-time.
Contoh:
Procedure TForm1.StoreMyFile(Const AFileName: String);
Var
vBlob: TADOBlobStream;
Begin
// anggap lah kita mau nambah reccord baru, utk yang lain pake edit
tblMyFiles.Append;
// simpan nama asli file ybs, strip the path portion
tblMyFiles.FieldByName('Name').Value := AFileName
// simpan isi file nya
vBlob := TADOBlobStream.Create(tblMyFiles.FieldByName('Bin') AS TBlobField, bmWrite);
Try
vBlob.LoadFromFile(AFileName);
Finally
vBlob.Free;
End;
// simpan
tblMyFiles.CheckBrowseMode;
End;
// Di sini kita mengambil isi field 'Bin' dari record yang sedang aktif dan
// mengembalikannya sebagai file di direktori 'C:\MyFiles'
Procedure TForm1.GetMyFile;
Var
vBlob: TADOBlobStream;
Begin
vBlob := TADOBlobStream.Create(tblMyFiles.FieldByName('Bin') AS TBlobField, bmRead);
Try
vBlob.SaveToFile('C:\MyFiles\' + tblMyFiles.FieldByName('Name').AsString);
Finally
vBlob.Free;
End;
End;
Secara umum cara pertama lebih mudah. Berikut kodenya:
(*************************************************************************
Diasumsikan ada ADODataset bernama tblMyFiles yang berisi 3 buah persistent field
bernama tblMyFilesID (utk field bernama 'ID'), tblMyFilesName (utk field bernama 'Name'),
dan tblMyFilesBin (utk field bernama 'Bin')
Field 'ID' cuma buat identity saja (primary key) bertipe int(eger)
Field 'Name' buat nampung nama aslinya file yang disimpan
Field 'Bin' buat nampung isi file
*************************************************************************)
// AFileName harus sudah berisi nama file yang valid yang ingin disimpan di database
Procedure TForm1.StoreMyFile(Const AFileName: String);
Begin
// anggap lah kita mau nambah reccord baru, utk yang lain pake edit
tblMyFiles.Append;
// simpan nama asli file ybs, strip the path portion
tblMyFilesName.Value := ExtractFileName(AFileName);
// simpan isi file nya
tblMyFilesBin.LoadFromFile(AFileName)
// simpan
tblMyFiles.CheckBrowseMode;
End;
// Di sini kita mengambil isi field 'Bin' dari record yang sedang aktif dan
// mengembalikannya sebagai file di direktori 'C:\MyFiles'
Procedure TForm1.GetMyFile;
Begin
tblMyFilesBin.SaveToFile('C:\MyFiles\' + tblMyFilesName.Value);
End;
Cara kedua sedikit ribet, melibatkan penggunakan Stream (TADOBlobStream, atau kombinasi TBlobStream dan TFileStream), hanya bermanfaat jika kamu tidak mau menggunakan metode Persistent Field. Seperti pada kasus penggunaan sebuah dataset secara bersama. Dimana tipe2 field yang akan diambil tidak bisa langsung ditentukan pada saat design-time.
Contoh:
Procedure TForm1.StoreMyFile(Const AFileName: String);
Var
vBlob: TADOBlobStream;
Begin
// anggap lah kita mau nambah reccord baru, utk yang lain pake edit
tblMyFiles.Append;
// simpan nama asli file ybs, strip the path portion
tblMyFiles.FieldByName('Name').Value := AFileName
// simpan isi file nya
vBlob := TADOBlobStream.Create(tblMyFiles.FieldByName('Bin') AS TBlobField, bmWrite);
Try
vBlob.LoadFromFile(AFileName);
Finally
vBlob.Free;
End;
// simpan
tblMyFiles.CheckBrowseMode;
End;
// Di sini kita mengambil isi field 'Bin' dari record yang sedang aktif dan
// mengembalikannya sebagai file di direktori 'C:\MyFiles'
Procedure TForm1.GetMyFile;
Var
vBlob: TADOBlobStream;
Begin
vBlob := TADOBlobStream.Create(tblMyFiles.FieldByName('Bin') AS TBlobField, bmRead);
Try
vBlob.SaveToFile('C:\MyFiles\' + tblMyFiles.FieldByName('Name').AsString);
Finally
vBlob.Free;
End;
End;
Comments