Berbeda dengan tipe data lain non BLOB yang bisa langsung terbaca dengan membuka Datasheet view dari sebuah tabel, tipe data BLOB tidak bisa dibaca dengan cara itu. Dengan membuka Datasheet view tabel yang berisi data BLOB, kita hanya akan melihat sebuah tulisan Long Binary Data tanpa mengetahui bagaimana bentuk data yang sebenarnya adalah sebuah file.
Di MS Access, semua data BLOB, bila disimpan ke dalam sebuah tabel hanya ada tulisan Long Binary Data. Kita tidak bisa tahu seperti apakah bentuknya. Sebagai contoh, lihat gambar di bawah ini, Datasheet view tabel tblBlob. Pada tabel itu, terdapat berbagai macam file. Bila kolom non BLOB data seperti blobMeta, blobNamaFile, blobNamaEkstensi, blobUkuran, dan blobDeskripsi dihilangkan, maka kita tidak akan tahu jenis file apa yang ada didalamnya.
![]() |
| Gambar 1. Field/kolom blobData yang berisi data BLOB berupa file |
Di sinilah letak pentingnya kolom atau field non-BLOB, seperti yang telah dibuat sebelumnya pada posting yang berjudul Mengenal Tipe Data BLOB di MS Access, yaitu untuk memberikan informasi yang relevan dengan data BLOB itu sendiri. Dengan mengetahui jenis file yang ada dalam field dengan tipe data BLOB, kita bisa memberi semacam perlakuan untuk mengkonversi file sesuai dengan jenisnya, sehingga data BLOB itu bisa terbaca.
Cara membaca data BLOB
Supaya data BLOB bisa terbaca, maka kita harus mentransfer data BLOB menjadi sebuah file. File itu akan disimpan sementara. Bila tidak dipergunakan lagi, kita bisa menghapusnya dengan tujuan untuk menghemat pemakaian media penyimpanan. File sementara itu disimpan di direktori sementara. Tujuannya, selain untuk menjaga kerahasiaan, juga untuk menghemat trafik jaringan. Setelah menjadi file, kita dapat membukanya dengan aplikasi yang sesuai.
![]() |
| Gambar 2. Data BLOB berupa file gambar (atas dan bawah) |
Berikut ini adalah cara membaca data BLOB. Sebagai percobaan, kita akan menggunakan form frmBLOB yang telah dibuat sebelumnya di posting yang berjudul Menyimpan Data Tipe BLOB di MS Access.
- Bukalah Design View dari form frmBlob.
- Pada bagian Form Header, sisipkanlah text box dan tombol perintah dengan rincian properti sebagai berikut:
- Text box, Name= txtKriteria
- Button (Form Control), Name= cmdTampilkan, Caption= Tampilkan
- Button (Form Control), Name= cmdGanti, Caption= Ganti File yang Sudah Ada
- Pada bagian Form Detail, sisipkan sebuah tombol perintah dengan properti sebagai berikut: Name= cmdBukaFile, Caption= Buka File.
- Masih pada bagian Form Detail, sorotlah control yang bernama blobData. Aturlah properti Control Source menggunakan expression builder sehigga properti Control Source= =namaPathFile([blobid]). Control Source ini berisi fungsi namaPathFile yang diambil dari modul mdlBlobBaca.
- Pada bagian Form Footer, sisipkan sebuah tombol perintah dengan properti sebagai berikut: : Name= cmdBersihkan, Caption= Bersihkan File Temporer. Tujuannya untuk menghapus file yang tidak perlu, sehingga bisa menghemat pemakaian media penyimpanan.
![]() |
| Gamber 3. Data BLOB berupa file di-zip yang dibuka dengan MS Access |
Design form frmBlob yang sudah diperbaharui bisa dilihat pada gambar di bawah ini.
![]() |
| Gambar 3. Form design dari frmBlob yang sudah diperbaharui |
Berikut ini adalah kode VBA yang ada di modul form Form_frmBlob. Modul Form_frmBlob adalah modul yang ada di posting Menyimpan Data Tipe BLOB di MS Access (link di atas) dan telah diperbaharui sejalan dengan penambahan beberapa control tersebut di atas.
Option Compare Database
Private Const constStrTableName As String = "tblBlob"
Private Const constPrimaryKeyFieldName As String = "blobId"
Private strLocalSql As String
Private Sub cmdBersihkan_Click()
bersihkanTempFile
End Sub
Private Sub cmdGanti_Click()
Dim rs As DAO.Recordset
Dim strPathFile As String
Dim lngMaxSize As Long
Dim oleBlobData As Variant, oleBlobBacaData As Variant
Dim strKriteria As Variant
Dim strSql As String
If Me.blobId = 0 Then
MsgBox "Tidak ada Blob Id yang teridentifikasi", vbExclamation
Exit Sub
End If
If IsNull(Me.txtNamaFile) Then
MsgBox "Tidak ada nama file teridentifikasi", vbExclamation
Me.txtNamaFile.SetFocus
Exit Sub
End If
If Me.txtNamaFile = "" _
Or Not adaNamaFile(Me.txtNamaFile) Then
MsgBox "Tidak ada nama file teridentifikasi", vbExclamation
Me.txtNamaFile.SetFocus
Exit Sub
End If
strKriteria = Me.txtKriteria '
strSql = strLocalSql & " WHERE " & constPrimaryKeyFieldName & "=" & strKriteria
Set rs = daoDbs.OpenRecordset(strSql, dbOpenDynaset)
rs.Edit
If CLng(simpanBlob(Me.txtNamaFile, rs, "blobObjek")) > constBlobMaxSize Then
MsgBox "Ukuran file lebih besar dari yang dipersyaratkan.", vbExclamation
Exit Sub
End If
oleBlobData = simpanBlob(Me.txtNamaFile, rs, "blobObjek")
rs!blobNamaFile = uraiPathFile(Me.txtNamaFile)(0)
rs!blobNamaEkstensi = uraiPathFile(Me.txtNamaFile)(2)
rs!blobUkuran = CLng(oleBlobData)
rs.Update
rs.Bookmark = rs.LastModified
Me.blobId = rs!blobId
If folderTemporer = "" Then Exit Sub
strPathFile = folderTemporer & rs!blobNamaFile
oleBlobBacaData = bacaBlob(rs, "blobObjek", strPathFile)
Me.blobNamaFile = rs!blobNamaFile
Me.blobNamaEkstensi = rs!blobNamaEkstensi
Me.blobUkuran = rs!blobUkuran
Me.blobData.Requery
rs.Close
Set rs = Nothing
End Sub
Private Sub cmdHapus_Click()
Dim strKriteria As Variant
Dim strPesan As String
strKriteria = Me.blobId
strPesan = "Data dengan Id nomor " & strKriteria & " akan dihapus?"
If MsgBox(strPesan, vbYesNo, "Hapus Data BLOB") = vbYes Then
daoDbs.Execute "DELETE * FROM " & constStrTableName & " WHERE " & constPrimaryKeyFieldName & "=" & strKriteria
MsgBox "Data dengan Id nomor " & strKriteria & " telah dihapus.", vbInformation
Me.blobNamaFile = vbNullString
Me.blobNamaEkstensi = vbNullString
Me.blobUkuran = vbNullString
Me.blobId = vbNullString
Me.blobDeskripsi = vbNullString
Me.blobMeta = vbNullString
End If
End Sub
Private Sub cmdPilihFile_Click()
Me.txtNamaFile = kotakFileDialog(Nz(Me.txtNamaFile, ""))
Me.txtNamaFile.SetFocus
End Sub
Private Sub cmdSimpan_Click()
Dim rs As DAO.Recordset
Dim strKriteria As Variant
Dim strSql As String
Cancel = False
If IsNull(Me.blobNamaFile) Then
MsgBox "Tidak ada file yang disimpan.", vbExclamation
Cancel = True
Exit Sub
End If
strKriteria = Me.blobId
strSql = strLocalSql & " WHERE " & constPrimaryKeyFieldName & "=" & strKriteria
Set rs = daoDbs.OpenRecordset(strSql, dbOpenDynaset)
rs.Edit
rs!blobDeskripsi = Me.blobDeskripsi
rs.Update
rs.Close
Set rs = Nothing
End Sub
Private Sub cmdSimpanTambahBaru_Click()
cmdSimpan_Click
If Not Cancel Then cmdPilihFile_Click
End Sub
Private Sub cmdTambahBaru_Click()
cmdPilihFile_Click
End Sub
Private Sub cmdTampilkan_Click()
Dim rs As DAO.Recordset
Dim strKriteria As Variant, oleBlobBacaData As Variant
Dim strSql As String, strPathFile As String
If IsNull(Me.txtKriteria) Then Exit Sub
strKriteria = Me.txtKriteria
strSql = strLocalSql & " WHERE " & constPrimaryKeyFieldName & "=" & strKriteria
Set rs = daoDbs.OpenRecordset(strSql, dbOpenDynaset)
If adaBlobId(CLng(strKriteria)) Then
Me.blobId = rs!blobId
Me.blobMeta = rs!blobMeta
Me.blobDeskripsi = rs!blobDeskripsi
Me.blobNamaFile = rs!blobNamaFile
Me.blobNamaEkstensi = rs!blobNamaEkstensi
If folderTemporer = "" Then Exit Sub
strPathFile = folderTemporer & Me.blobNamaFile
If Not adaNamaFile(strPathFile) Then oleBlobBacaData = copyBlobObjek(strSql, strPathFile)
Me.blobData.Requery
Else
MsgBox "Tidak ada Blob Id: " & strKriteria, vbExclamation
End If
rs.Close
Set rs = Nothing
End Sub
Private Sub cmdUpload_Click()
Dim rs As DAO.Recordset
Dim strPathFile As String
Dim oleBlobData As Variant, oleBlobBacaData As Variant
If IsNull(Me.txtNamaFile) Then
MsgBox "Tidak ada nama file untuk di-upload.", vbExclamation
Me.txtNamaFile.SetFocus
Exit Sub
End If
If Me.txtNamaFile = "" _
Or Not adaNamaFile(Me.txtNamaFile) Then
MsgBox "Tidak ada nama file untuk di-upload.", vbExclamation
Me.txtNamaFile.SetFocus
Exit Sub
End If
Set rs = daoDbs.OpenRecordset(constStrTableName, dbOpenTable)
rs.AddNew
If CLng(simpanBlob(Me.txtNamaFile, rs, "blobObjek")) > constBlobMaxSize Then
MsgBox "Ukuran file lebih besar dari yang dipersyaratkan.", vbExclamation
Exit Sub
End If
oleBlobData = simpanBlob(Me.txtNamaFile, rs, "blobObjek")
rs!blobNamaFile = uraiPathFile(Me.txtNamaFile)(0)
rs!blobNamaEkstensi = uraiPathFile(Me.txtNamaFile)(2)
rs!blobUkuran = CLng(oleBlobData)
rs.Update
rs.Bookmark = rs.LastModified
Me.blobId = rs!blobId
If folderTemporer = "" Then Exit Sub
strPathFile = folderTemporer & rs!blobNamaFile
oleBlobBacaData = bacaBlob(rs, "blobObjek", strPathFile)
Me.blobNamaFile = rs!blobNamaFile
Me.blobNamaEkstensi = rs!blobNamaEkstensi
Me.blobUkuran = rs!blobUkuran
Me.blobData.Requery
rs.Close
Set rs = Nothing
End Sub
Private Sub Form_Open(Cancel As Integer)
strLocalSql = "SELECT * FROM " & constStrTableName
Set daoDbs = CurrentDb()
End Sub
Private Sub cmdBukaFile_Click()
If Me.blobId <> "" Or Me.blobId <> Null Then
fHandleFile namaPathFile(Me.blobId), WIN_NORMAL
End If
End Sub
Berikut ini adalah kode VBA yang ada di form Form_frmBlobBaca. Modul ini khusus digunakan untuk membaca data BLOB.
Option Compare Database
Option Explicit
Const BlockSize = 32768
Function bacaBlob(T As Recordset, sField As String, _
Destination As String)
Dim intNumBlocks As Integer, intDestFile As Integer, i As Integer
Dim lngFileLength As Long, lngLeftOver As Long
Dim strFileData As String
Dim varRetVal As Variant
On Error GoTo Err_bacaBlob
lngFileLength = T(sField).FieldSize()
If lngFileLength = 0 Then
bacaBlob = 0
Exit Function
End If
intNumBlocks = lngFileLength \ BlockSize
lngLeftOver = lngFileLength Mod BlockSize
intDestFile = FreeFile
Open Destination For Output As intDestFile
Close intDestFile
Open Destination For Binary As intDestFile
varRetVal = SysCmd(acSysCmdInitMeter, _
"Writing BLOB", lngFileLength / 1000)
strFileData = T(sField).GetChunk(0, lngLeftOver)
Put intDestFile, , strFileData
varRetVal = SysCmd(acSysCmdUpdateMeter, lngLeftOver / 1000)
For i = 1 To intNumBlocks
strFileData = T(sField).GetChunk((i - 1) * BlockSize _
+ lngLeftOver, BlockSize)
Put intDestFile, , strFileData
varRetVal = SysCmd(acSysCmdUpdateMeter, _
((i - 1) * BlockSize + lngLeftOver) / 1000)
Next i
varRetVal = SysCmd(acSysCmdRemoveMeter)
Close intDestFile
bacaBlob = lngFileLength
Exit Function
Err_bacaBlob:
bacaBlob = -Err
Exit Function
End Function
Function namaFile(intBlobId As Integer) As String
Dim rs As DAO.Recordset
Set rs = daoDbs.OpenRecordset("SELECT blobNamaFile FROM tblBlob WHERE blobId=" & intBlobId, dbOpenSnapshot)
If rs.RecordCount = 0 Then
namaFile = ""
Else
namaFile = Nz(rs.Fields("blobNamaFile").Value, "")
End If
rs.Close
Set rs = Nothing
End Function
Function namaPathFile(intBlobId As Integer) As String
If namaFile(intBlobId) <> "" Then
namaPathFile = folderTemporer & namaFile(intBlobId)
Else
namaPathFile = ""
End If
End Function
Function adaBlobId(lngBlobDataId As Long) As Boolean
Dim lngBlobId As Long
On Error GoTo Err_Msg
lngBlobId = DCount("*", "tblBlob", "blobId=" & lngBlobDataId)
adaBlobId = False
If lngBlobId > 0 Then adaBlobId = True
Exit_Function:
Exit Function
Err_Msg:
MsgBox "Function adaBlobId, Error # " & str(Err.Number) & ", source: " & Err.Source & _
Chr(13) & Err.description
Resume Exit_Function
End Function
Function bersihkanTempFile()
Dim objFSO As Object, objFolder As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile (folderTemporer & "*.*")
Set objFSO = Nothing
End Function
Function copyBlobObjek(strTbl As String, strFilePath As String) As Variant 'OK
Dim rst As DAO.Recordset
On Error GoTo Err_Msg
Set rst = daoDbs.OpenRecordset(strTbl, dbOpenSnapshot)
copyBlobObjek = bacaBlob(rst, "blobObjek", strFilePath)
rst.Close
Set rst = Nothing
Exit_Function:
Exit Function
Err_Msg:
MsgBox "Function copyBlobObjek, Error # " & str(Err.Number) & ", source: " & Err.Source & _
Chr(13) & Err.description
Resume Exit_Function
End Function
Untuk memperoleh contoh aplikasi BLOB, silakan ikuti petunjuk di bawah ini:
- Follow on Facebook yang ada di kotak sebelah kanan blog Access Terapan dengan memilih Following.
- Setelah itu, kirim email ke admin a.n. bambang.subro@gmail.com untuk memperoleh akses ke Google Drive Access Terapan.
- Setelah akses diperoleh, silakan buka Googlr Drive lalu klik bagian silakan download file blobSimpanBaca.zip. File ini berisi 5 objek Access:
- Tabel yang bernama tblBlob, khusus untuk menyimpan data BLOB beserta properti/metadata
- Form yang bernama frmBlob, khusus untuk antarmuka antara user dengan tblBlob. Di dalamnya berisi class modul Frm_frmBlob.
- Tiga Modul yang bernama mdlAPI, mdlBlobSimpan, dan mdlBaca digunakan untuk memporses upload file ke dalam database di tblBlob dan menampilkannya kembali.
- Bukalah form frmBlob dalam format Form View.
- Sebagai uji coba lakukan upload file (apa saja terserah), yang penting tidak boleh melebihi batas maksimum ukuran file yang dipersyaratkan pada deklarasi konstanta Public Const constBlobMaxSize.






Perkenalkan, saya dari tim kumpulbagi. Saya ingin tau, apakah kiranya anda berencana untuk mengoleksi files menggunakan hosting yang baru?
ReplyDeleteJika ya, silahkan kunjungi website ini www.kbagi.com untuk info selengkapnya.
Di sana anda bisa dengan bebas share dan mendowload foto-foto keluarga dan trip, music, video, filem dll dalam jumlah dan waktu yang tidak terbatas, setelah registrasi terlebih dahulu. Gratis :)