Menyimpan / Menampilkan file image / bmp (Bagian 1)

Sample berikut ini akan menunjukkan cara menyimpan image/gambar yg berupa file BMP kedalam database dg memakai OLE.

Lalu untuk apa kita menyimpan image di database ?

Sebagian dari aplikasi kita mungkin memerlukan data berupa picture/gambar untuk mendukung informasi yg ada.

Bisa berupa foto orang untuk data HRD, gambar2 material untuk program yg lain.

Ada 2 teknik sekurangnya dalam pengelolaan data image ini, yaitu dg menyimpan gambar tersebut di database atau dg hanya menyimpan “path” lokasi file tersebut di server. Lalu apa bedanya ?

Yang jelas dg dimasukkannya image ke database maka data gambar/image itu akan disimpan dalam database (data binary).

Sedang jika “path” lokasi image itu saja yg disimpan di database maka image/gambar akan dicopykan langsung di dalam salah satu lokasi/directory di dalam hardisk server.

Nah untuk latihan kali ini akan di tunjukkan bagaimana menyimpan data image kedalam database.

Untuk latihan kali ini saya memakai database MySQL dg structure spt ini :

Database “test” table “gambar” dg field ada 3 :

Kode char(5)                           ………primary key

Keterangan varchar(255)        ………perhatikan ini sample saja tdk mengikat

Image blob                              ………type data ini panjang/length nya tdk usah di isi

                                                (spt tampak pada gambar di atas)

Dalam database MySQL type data untuk image kita bisa pake type data BLOB (binary large object).

Dalam database MsSQL type data yg dipakai adalah IMAGE

Dalam database Sybase SQL Anywhere type data yg dipakai adalah LONG BINARY

Mmmm dari ke 3 nya mana yg paling OK ?

Lho kok anda tanya spt itu …..hehehehehe J

Sejauh yg saya coba Sybase SQL Anywhere yg paling “cocok” dg PB

Kenapa ? Apakah krn PB juga product dari Sybase ? Mungkin hehehehe J

Mungkin kesimpulan saya saat ini masih premature tetapi nanti anda akan tahu seberapa jauh perbedaannya…..dan jika saya nanti menemukan hal baru di MySQL atau MsSQL tentunya akan saya update sample ini J

Ok mari kita kembali ke jalur semula….

Asumsi saya anda sudah bisa membuat aplikasi dg PB

Bisa membuat dan konek ke database MySQL…..

Anda perhatikan….browse table “gambar” anda spt ini….

Selanjutnya buat workspace spt ini….

Buat koneksi di “open” aplikasi anda spt ini :

// Profile test
SQLCA.DBMS = "ODBC"
SQLCA.Lock = "RU"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='UID=root;DRIVER={MySQL ODBC 3.51 Driver};
DESC=;DATABASE=test;SERVER=mztolo;PASSWORD=;PORT=3306;OPTION=3;STMT=;
',CommitOnDisconnect='No'"
connect ;
open(w_utama)

Selanjuntnya buka/create sheet ….spt ini :

Selanjutnya klik control OLE …spt ini :

Sampai keluar modul spt ini :

Pilih Object Type-nya “Paintbrush Picture” dan klik tombol OK

Setelah itu klik/tempatkan di area kosong yg ada disheet……spt ini

Jika program Paint (windows) aktif/jalan maka close saja…..

Atur properties OLE tersebut spt ini …

Tambahkan object2 baru spt tampak di gambar bawah :

Ada “kode” dg object entry “Single Line Edit” control

Ada “keterangan” dg object entry “MultiLineEdit” control

Ada 3 tombol “Pick Image”, “Save” dan “Close”

Isi click event tombol “Close” :

Close(parent)

Isi click event tombol “Pick Image” :

string ls_path,ls_filename
int li_rc, li_rc2
 
GetFileOpenName("Select file to open",ls_path,ls_filename)
If ls_filename ="" Then return
if ole_1.insertfile(ls_path)=0 then
            return -1
end if

Note :

GetFileOpenName berfungsi untuk menampilkan modul Windows untuk membuka file image/gambar.

Inserfile berfungsi untuk meng-insertkan image ke dalam control OLE.

Isi click event tombol “Save” :

int li_rc
blob lb_object
//check if a title was supplied
if sle_1.text = "" Then
	Messagebox("OLE SAVE","You must supply a KODE")
	return -1
end if
//get the data from the ole control
lb_object = ole_1.objectdata
//check if title already exists
  SELECT count(*)  
    INTO :li_rc
    FROM gambar  
   WHERE gambar.kode = :sle_1.text   ;
//insert a new row if this is a new title
If li_rc = 0 Then
	//add the title, desc to the database
	  INSERT INTO gambar ( kode, keterangan,image )  
	  VALUES ( :sle_1.text, :mle_1.text,' ')  ;
	if SQLCA.SQLCode = -1 then
		MessageBox("SQL error",SQLCA.SQLErrText,Information!)
		return -1
	end if
End If
sqlca.autocommit = TRUE
//update the row just inserted adding the blob ole control now
 updateblob gambar set image = :lb_object
 	where kode =:sle_1.text ;
if SQLCA.SQLCode = -1 then
	MessageBox("SQL error",SQLCA.SQLErrText,Information!)
	return -1
end if
commit ;
messagebox(':)','Sukses !!')

Note :

Perhatikan yg di cetak tebal…itu koding yg penting atau inti dari proses tersebut.

Sekenario yg berlaku adalah….

  1. Lakukan proses INSERT data terlebih dahulu dg data kosong pada image-nya
  2. Autocommit harus di setting ke TRUE
  3. Dan lakukan UPDATE image sesuai data kode waktu insert

Simpan dan coba “RUN” aplikasi anda……

Klik tombol “Pick Image” ….dan pilih salah satu image/bmp anda….misal spt ini :

Pilih salah satu file….. (perhatikan ukuran file nya 1 KB)

Dan klik tombol “OPEN”

Tampak spt ini :

Klik tombol “Save”

Lihat database anda ….

Klik kolom “image” BLOB anda….dan perhatikan tab “Text” di bawah….

Ada semacam data disitu…artinya apa ?

Jika ada data spt itu maka data gambar/image telah tersimpan….. J

Lalu bagaimana cara menampilkannya ?

Buat saja datawindow “freeform” misalnya…spt ini

Kok hanya 2 kolom ? Dimana kolom “image” ?

Benar …waktu anda membuat datawindow ini maka kolom dg type data blob tdk bisa ditampilkan (select langsung di desain datawindownya)

Lalu bagaimana cara menampilkan image yg sudah disimpan ?

Caranya tambahkan object “blob OLE” di datawindow anda….

Klik  dan klik tempat kosong di datawindow…misal di bawah “keterangan”

Sampai keluar modul spt ini……

Perhatikan di bawah “keterangan” ada control “Blob”…..

Klik table “gambar”….klik kolom “image”….

Ketik “Key Clause”….pilih OLE Class-nya “PBrush:Paintbrush Picture” dan Client Name Expression” …spt ini :

Klik tombol OK dan …atur lebar control “blob OLE” seperlunya….spt ini :

Selanjutnya retrieve datawindow tersebut…..maka…tampaklah data image anda J

Simpan datawindow…dg nama “dw_gambar”…..

Coba anda “add” image/bmp yg lain…..

Misal ukuran 59 KB…..99 KB dll….

Kenapa ukuran 99 KB tdk bisa tampil di datawindow ? Spt ini :

Coba anda double click tepat di kotak “image” tersebut..untuk menjalankan program Paint (window)……aha !

Tampak di program Paint…gambar hanya tampak sebagian….atau tersimpan sebagian

Kenapa ? Type data blob …tdk cukup menampungnya ! Benar sekali…..

Dan jika anda close program Paint tersebut…maka tampaklah….

Coba table gambar anda ….untuk kolom “image” di ubah dari type data “blob” menjadi “LONGBLOB”

Dan coba lagi untuk image dg ukuran 99 KB tersebut….

Ok…cukup disini sample menyimpan file BMP…semoga anda paham J

Sukses untuk anda !!

link bagian kedua di bawah ini ya :

2 comments on “Menyimpan / Menampilkan file image / bmp (Bagian 1)Add yours →

Tinggalkan Balasan

Translate ▲