Menyimpan gambar pada field blob menggunakan firebird embeded

Bismillahirrohmanirrohim,
Assalamu’alaikum Wr Wb,

Banyak contoh aplikasi “menyimpan gambar didatabase”, baik menggunakan database desktop maupun database client server.
Namun yang banyak kita temui sebenarnya tidak menyimpan didatabase karena yang disimpan di database/table hanya nama file nya saja.
Kali ini akan kami tunjukkan cara menyimpan gambar pada database lebih tepatnya pada field type blob.

Ada mitos atau anggapakan keliru (khususnya pada database interbase/firebird, kurang tau untuk database lain) yang mengatakan bahwa menyimpan gambar di blob akan membebani database/server, database akan menjadi berat dan besar.

Kalo jadi besar bener karena memang butuh tempat untuk menyimpan gambar tersebut, tapi bukankah kalo disimpan dalam bentuk file juga butuh tempat.
Kalo jadi berat, ini yang keliru karena pada saat kita select record yang mengandung blob, dia hanya memuat blob_idnya saja yang besarnya hanya 8 byte, isi sebenarnya akan dimuat saat kita melakukan getsegmen, inipun dilakukan secara streaming per segmen dengan ukuran kecil sesuai yang ditentukan.

Untuk pembacaan dikomputer lain penyimpanan diblob ini malah lebih efisien, kalo kita menyimpan gambar di field blob kita hanya pelu mengatur firewall untuk port database saja,

namun kalo kita menyimpan hanya pathnya saja berarti kita masih perlu jalan lain untuk membaca file gambar tersebut, umumnya menggunakan file sharing.

Ada beberapa kelemahan kalo kita menggunakan file sharing, terutama masalah keamanan data.
Karena hak akses file sharing ini terpisah dengan hak akses database, hal ini memungkinkan seseorang yang tidak punya hak akses ke database bisa meng obok2 gambar, seperti menghapus atau mengganti gambar.
Masalah lain bisa aplikasi error karena alamat masih ada tapi file gambar sudah terhapus, atau sebaliknya record sudah dihapus tapi file gambar lupa/gagal dihapus akhir menjadi sampah.

Kita tidak perlu kuatir untuk menyimpan gambar atau media lain di field blob interbase/firbird karena batasannya lumayan besar yaitu 32GB untuk firebird dan 256GB untuk interbase.
Selain untuk menyimpan data binary field blob juga bisa untuk menyimpan data text.

Ukuran maksimal sebuah record pada interbase/firebird adalah 64KB, dengan adanya field blob batasan tersebut tidak perlu dirisaukan lagi karena sebuah field blob hanya menempati 8 byte pada sebuah record.

Hingga saat ini ada beberapa jenis firebird server, diantaranya classic, super server, super classic dan embeded server.

Pada contoh kali ini kita menggunakan Firebird 2.5 versi embeded server, dengan pertimbangan karena pada versi ini kita tidak perlu menginstall atau menjalan firebird untuk membaca database, dengan demikian yang bukan pengguna firebird pun bisa mencoba aplikasi ini.

Kelebihan versi ini seperti yang di sebutkan diatas adalah kita tidak perlu menginstall atau menjalan firebird untuk membaca database, disamping kelebihan tentunya juga ada kekurangan yaitu pada versi ini adalah database tidak bisa dibaca bersama2 atau dibaca dari komputer lain.

Untuk databasenya sendiri tidak ada perbedaan pada masing-masing versi, jadi database yang kita buat untuk client server juga bisa dibaca versi embeded dan sebaliknya.

Selain penggunaan blob pada aplikasi ini juga ditunjukkan teknik pembuatan tumbnails secara otomatis, disini gambar disimpan pada 2 field blob, 1 field untuk menyimpan gambar asli, 1 field lagi untuk menyimpan gambar yang dikecilkan.

Lho .. bukannya jadi lebih boros space …. memang, namun pemborosan ini akan tergantikan dengan performa yang bagus.
Dengan adanya field tumbnail ini maka gambar akan tampil lebih cepat dan hemat bandwidth, kita juga masih mempunyai gambar ukuran asli nantinya mungkin dibutuhkan untuk melihat detail atau untuk keperluan pencetakan.

Disini ditunjukkan juga penggunaan Actionlist untuk meminimalkan penggunaan koding, beberapa fungsi kontrol database seperti insert, update, post, delete kita menggunakan Actionlist sehingga tidak perlu bikin koding sendiri.

Pada contoh ini kita gunakan FIBPlus sebagai komponen koneksi databasenya, menurut pengalaman kami FIBPlus adalah yang paling banyak mendukung fitur2 interbase dan firebird.
Selain FIBPlus kita juga bisa menggunakan komponen lain seperti IBExpress, IBObject, Zeos dan DBExpress, untuk Ado tidak kami rekomendasikan karena Ado sifatnya umum dan hanya mendukung fitur2 umum saja.

Disini juga ditunjukkan penggunaan skin internal pada alpha skin sehingga kita tidak perlu menyertakan file skin saat mendistribusikan.
Untuk menampilkan gambar asli kita gunakan form lain yang dimuat secara runtime dengan tujuan menghemat resource karena memang tidak selalu dibutuhkan.

Alamat database juga dimuat secara runtime yang diambil dari file FBBlobPictureEmbed.ini sehingga mudah untuk mengganti tanpa harus compile ulang.

Aplikasi ini juga bisa untuk membaca versi client server dengan mengganti file ini tersebut.
Untuk mendistribusikan secara portable kita cukup menyertakan semua file yang ada di folder dist dan tidak perlu menginstall firebird.

Catatan:
Bagi teman-teman yang sudah mencicipi versi awal yang pernah saya share secara private, ada sedikit bug bahwa tumbnails yang dibuat ukurannya masih sama dengan ukuran sebenarnya belum diperkecil, solusinya mudah sekali cukup hapus field “SmallFoto” kemudian baca dengan aplikasi yang baru maka dia akan bikin field dan generate tumbnails secara otomatis.

Contoh aplikasi lengkap dengan source code dapat di download di
https://app.box.com/s/pa67uv2mfhp0qnykhxyq

Komponen 3Party yang dibutuhkan :
– FIBPlus
– Alphaskin

Bagi yang gak pake FIBPlus jangan kuatir

Disediakan juga versi Zeos bagi yang tidak menggunakan FIBPlus,
Contoh aplikasi lengkap dengan source code dapat di download di
https://app.box.com/s/cgow5tfuiyxpmk9cjzj0

Juga ada versi IBX (Interbase Express bawaan delphi),
Contoh aplikasi lengkap dengan source code dapat di download di
https://app.box.com/s/fkogbmj0ficnlxoc9zb8

Demikian Semoga bermanfaat.

7 Comments to Menyimpan gambar pada field blob menggunakan firebird embeded

  1. mboloz says:

    😀 pertamax diamankan, terimakasih share nya pak, sering-sering hahaa

  2. Navas Iedoo says:

    yaaahhh, Pak Imam telat, ini yg dulu saya nanti2kan dari bapak, hehehe…
    Tapi yang ini tutorialnya lebih super lagi, Nice Article, izin sedot Pak…?
    🙂

  3. Arief Sofiyan says:

    Mantab Mbah Imam.. Murid ijin berguru.. 😀 hehehe..

  4. Aan Anwarudin says:

    pak share tutorial keamanan pada interbase ny dong.. :d

Leave a Reply to mboloz Cancel reply

Your email address will not be published. Required fields are marked *