468x60 Ads

Senin, 16 April 2012

Memanfaatkan ADO Stream Object Pada Visual Basic Untuk Akses Data Bertipe BLOB Pada SQL Server

Tulisan ini berasal dari salah satu dokumen HOWTO milik Microsoft (Q258038) yang judul
aslinya "HOWTO: Access and Modify SQL Server BLOB Data by Using the ADO Stream
Object". Penulis sengaja menerjemahkannya secara bebas ke bahasa Indonesia buat
pembaca khususnya para programmer Visual Basic. Kali ini kita akan bermain-main dengan
object ADO Stream untuk operasi penyimpanan dan pemanggilan data image dari atau ke
SQL Server. OK, sebelumnya simak dulu pesan-pesan berikut ini.
Tulisan ini bersifat terbuka dan Anda bebas untuk menyebarluaskan tulisan ini selama Anda
menyebutkan sumber aslinya. Anda bisa memberikan kritik atau saran melalui
article@sony-ak.com. Penulis tidak bertanggung jawab atas segala yang terjadi akibat tulisan
ini dan semata-mata hanya ditujukan untuk kepentingan pendidikan.
Stream object mulai diperkenalkan pada ADO (ActiveX Data Objects) versi 2.5 dan ini sangat
membantu dalam penyerhanaan code untuk meng-akses maupun menyimpan BLOB (Binary
Large Object) pada SQL Server. Sebelumnya pada ADO versi 2.0 - 2.1 Anda harus
menggunakan method GetChunks dan AppendChunk yang terdapat pada Field object untuk
melakukan operasi dengan tipe data BLOB.
Melalui tulisan ini akan disajikan contoh dari:
1. Menyimpan isi dari file .gif ke suatu field dengan tipe data Image pada SQL Server
2. Mengambil data BLOB dari SQL Server (tipe data Image) dan menyimpannya ke file di
hardisk
OK, sebelum kita mulai ke Visual Basic kita persiapkan dulu tabel-nya di SQL Server. Buatlah
table yang didalamnya berisi suatu field dengan tipe Image. Penulis akan membuat table
Lisensi Dokumen:
Copyright © 2003 IlmuKomputer.Com
Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan
disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat
tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang
disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang,
kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com.

tbl_test pada database Northwind dengan dua buah field yaitu img_id yang bertipe Integer dan
img_data yang bertipe Image. Field img_id digunakan sebagai ID dari image. Script SQL nya
adalah sebagai berikut (Anda bisa gunakan SQL Query Analyzer):
use Northwind
go
create table tbl_test (img_id int,img_data image)
OK, sekarang Anda sudah memiliki sebuah tabel untuk demo kita ini. Sekarang kita akan
membuat dulu form untuk demo kita ini.
1. Buatlah project baru (Standard EXE) pada Visual Basic.
2. Tambahkan dua buah kontrol CommandButton ke Form1. Ganti Caption
CommandButton1 menjadi 'Simpan Gambar Ke SQL Server'. Ganti Caption
CommandButton2 menjadi 'Load Gambar Dari SQL Server'.
3. Tambahkan kontrol Image ke Form1.
4. Pada menu Project pilih References... dan set reference ke Microsoft ActiveX Data
Objects 2.5 Object Library.
Nah, sampai disini form yang akan kita pergunakan untuk demo sudah jadi dan kira-kira
bentuknya seperti gambar di bawah:

Menyimpan isi dari file .gif ke suatu field dengan tipe data Image pada SQL Server,
Sekarang kita akan mulai dulu dengan demo yang pertama yaitu menyimpan suatu file image
ke dalam suatu tabel SQL Server yang mempunyai field yang bertipe Image. Sebelumnya kita
harus mempunyai sampel file image yang akan kita simpan. Disini penulis menggunakan file
sony-ak2.jpg yang penulis letakkan pada root C:¥.
Ketik atau paste code di bawah pada bagian deklarasi umum dari Form1:
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream
Kode di atas adalah deklarasi beberapa instance object yang akan kita buat yaitu class

Connection, Recordset dan Stream.
Sekarang ketik atau paste code di bawah ini pada bagian deklarasi umum dari Form1:
Private Sub Command1_Click()
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;" & _
"Data Source=<sql_server_anda>;" & _
"Initial Catalog=<database_anda>;" & _
"User Id=<username>;Password=<password>"
Set rs = New ADODB.Recordset
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.LoadFromFile "c:¥sony-ak2.jpg"
cn.BeginTrans
rs.Open "select img_id from tbl_test", _
cn, adOpenKeyset, adLockOptimistic
rs.AddNew
rs.Fields("img_id").Value = 111
rs.Update
rs.Close
rs.Open "select * from tbl_test where img_id=111", _
cn, adOpenKeyset, adLockOptimistic
rs.Fields("img_data").Value = mstream.Read
rs.Update
cn.CommitTrans
rs.Close
cn.Close
End Sub
Kode di atas merupakan kode event Click dari Command1 yang fungsinya untuk menyimpan
file image ke dalam database. Pada method cn.Open Anda harus mengganti nilai connection
string sesuai dengan database server Anda. Kemudian dibuat instance dari Recordset dan
Stream. Tipe stream kemudian diganti menjadi adTypeBinary dan kemudian stream
mengambil data file image dengan memanggil method LoadFromFile. Setelah itu kita
menyimpan id untuk image yang penulis beri kode 111. Kemudian kita select lagi row yang
image id nya 111 dan kemudian dilakukan pemasukan data stream tadi ke field img_data
dengan method stream Read dan kemudian data di update. Nah sampai disini data image
Anda akan tersimpan dalam database. Silakan Anda check dengan select * from
Northwind..tbl_test.
Mengambil data BLOB dari SQL Server (tipe data Image) dan menyimpannya ke file di
hardisk,
Sekarang kita akan berbuat sebaliknya, yaitu mengambil data image dari database dan akan
kita simpan ke suatu file di hardisk dan juga akan kita tampilkan ke layar melalui kontrol Image
pada Form1. Ketik atau paste code di bawah ini pada bagian deklarasi umum pada Form1:
Private Sub Command2_Click()
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;" & _
"Data Source=<sql_server_anda>;" & _
"Initial Catalog=<database_anda>;" & _
"User Id=<username>;Password=<password>"
Set rs = New ADODB.Recordset
rs.Open "select img_data from tbl_test " & _
"where img_id=111", cn, _
adOpenKeyset, adLockOptimistic

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("img_data").Value
mstream.SaveToFile "c:¥sony-ak2-from-db.jpg", _
adSaveCreateOverWrite
rs.Close
cn.Close
Set Image1.Picture = _
LoadPicture("c:¥sony-ak2-from-db.jpg")
End Sub
Kode di atas merupakan kode event Click dari Command2 yang fungsinya untuk mengambil
data image dari dalam database dan menyimpannya ke suatu file di hardisk dan kemudian
ditampilkan melalui kontrol Image pada Form1. Kode di atas mirip seperti kode sebelumnya
dimana pertama-tama kita melakukan koneksi dulu ke database melalui cn.Open. Kemudian
kita akan men-select row yang akan kita pilih berdasarkan id image. Penulis menggunakan
contoh id image = 111 sesuai id image yang sudah disimpan sebelumnya. Kemudian object
stream di ubah tipenya menjadi adTypeBinary dan stream diisi dengan data dari field img_data
dengan memanggil method Write. Setelah itu data yang sudah berada dalam stream tadi kita
simpan ke file dengan memanggil method SaveToFile. Penulis pada contoh di atas
menyimpannya ke C:¥sony-ak2-from-db.jpg. Kemudian tugas selanjutnya adalah
menampilkannya di kontrol Image.
Sekarang coba Anda jalankan project di atas dengan menekan tombol F5 dan lihatlah hasilnya.
Demikianlah untuk tulisan kali ini dan semoga berguna bagi pembaca semua. Jika ada yang
komentar atau kritik silakan dikirim melalui article@sony-ak.com.
Terakhir penulis ingin mengucapkan terimakasih kepada Microsoft Knowledge Base Article
dan Esa Ivani, thanks for your support and love.

1 komentar:

  1. Mohon bimbingannya agar stream pada adodb.stream bisa muncul otomatis

    BalasHapus