Cara menyimpan gambar atau foto ke database dengan Visual Basic

Bagaimana cara simpan gambar atau foto ke database dengan Visual Basic ? Nah itulah yang kita bahas tutorial kali ini lengkap dengan source code script programnya, teman-teman mungkin bertanya kok dibahas sedangkan di internet sudah banyak ditemukan mengenai artikel seperti ini?.
Menyimpan gambar foto ke database visual basicUntuk menjawab pertanyaan tersebut, di sini saya mau mengajak teman-teman lebih memahami dengan pembahasan yang sederhana, langkah demi langkah sehingga harapan saya teman-teman lebih mudah mengerti. Baiklah biar tulisan ini tidak terlalu panjang mari kita langsung saja menuju ke pokok pembahasannya.

Pertama yang perlu kita siapkan adalah database. Database yang saya gunakan di sini adalah database access dengan format 2003, langsung saja kita buat databasenya dengan kriteria sebagai berikut :

Nama Database db.mdb
Nama Tabel tb_foto
- – - – - – - – - – - – - – - – - – - – - -
Nama field Data Tipe
ID AutoNumber
nama Text
gambar OLE Object

Database ini juga saya gunakan dalam tutorial menyimpan gambar ke database menggunakan delphi. Setelah selesai membuat database, sekarang waktunya membuat project baru dengan membuka visual basic 6.0 selanjutnya kita memerlukan beberapa komponen dan reference yang harus di tambahkan ke project kita. Silahkan ikuti langkahnya sebagai berikut :

  1. Pada menu project klik ComponentsKomponen untuk gambar foto database visual basic
  2. Setelah itu akan muncul dialog windows, tambahkan komponen dengan memberi centang. Adapun komponen yang kita butuhkan di sini tampak pada gambar di bawah, setelah itu klik Ok.Komponen Visual Basic 6.0 foto gambar database
  3. Lakukan hal yang sama dengan langkah 1, tetapi kali ini yang diklik adalah References. Cari dan beri centang reference ADO, adapun reference ADO tersebut adalah yang diberi tanda panah pada gambar di bawah. Bila sudah klik Ok.References database ADO visual basic 6 untuk gambar atau foto

Sampai di situ lancar ya? :). Nah tugas selanjutnya adalah menambahkan komponen ke form, berikut yang kita perlukan :

  1. 1 buah Button
  2. 1 buah DataGrid
  3. 1 buah Label
  4. 1 buah Adodc
  5. 1 buah CommonDialog
  6. 1 buah Image
  7. 1 buah TextBox

Sampai di situ masih lancar ya?. Untuk DataGrid kita beri perlakuan khusus, klik kanan pada DataGrid(lihat gambar di bawah) dan lakukan Properties. Pada Column, pilih Column 0 kemudian isi Caption dan DataField sesuai gambar di bawah ini :
DataGrid untuk data hasil simpan foto atau gambar ke database visual basic

Tugas selanjutnya melakukan coding pada form yang sudah kita tambahkan komponen tadi.
Tambahkan barisan kode berikut ke bagian paling atas code form yang bertujuan untuk mendefenisi variabel yang akan kita butuhkan :

Dim conn As New ADODB.Connection
Dim strconnect As String
Dim gambarku As New ADODB.Stream

Setelah itu kita tambahkan fungsi untuk membuka koneksi ke database:

Function OpenConn() As Boolean
On Error GoTo ErrHandler
strconnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "db.mdb"
If conn.State = adStateOpen Then
    conn.Close
    Set conn = New ADODB.Connection
    conn.Open (strconnect)
    OpenConn = True
Else
    conn.Open (strconnect)
    OpenConn = True
End If
Exit Function
ErrHandler:
    OpenConn = False
    MsgBox "Koneksi tidak bisa dibuka, pastikan databasenya ada dan tidak sedang dibuka oleh aplikasi lain", vbExclamation, "Koneksi Error"
End Function

Untuk event/saat form di load kodenya sebagai berikut :

Private Sub Form_Load()
If Not OpenConn Then End
Adodc1.ConnectionString = strconnect
Adodc1.RecordSource = "SELECT * FROM tb_foto"
Adodc1.Refresh
DataGrid1.AllowUpdate = False
Set DataGrid1.DataSource = Adodc1
End Sub

Kode untuk DataGrid ketika diklik, penjelasannya pada komentar kode programnya ya :

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
' Kita mau tampilkan data ke Text1 dan Image1
On Error GoTo ErrHandler
With Adodc1.Recordset
    ' Nilai Text1
    Text1 = .Fields.Item(1).Value
    ' menggunakan ADODB.Stream karena gambarnya dari database
    Set gambarku = New ADODB.Stream
    gambarku.Type = adTypeBinary
    gambarku.Open
    gambarku.Write .Fields.Item(2).Value
    ' simpan temporary gambar ke file
    gambarku.SaveToFile App.Path & "Temp", adSaveCreateOverWrite
    ' temporary gambar yang disimpan ke file tadi di tampilkan ke Image1
    Image1.Picture = LoadPicture(App.Path & "Temp")
    ' hapus temporary gambar
    Kill App.Path & "Temp"
End With
Exit Sub
ErrHandler:
    ' kalau gambar kosong di database kita buat kosong juga untuk Image1
    If Err.Number = "3001" Then Image1.Picture = LoadPicture(""): Exit Sub
End Sub

Nah ini barisan kode yang terakhir yang akan menyimpan data ke database ketika Button Command1 di klik :

Private Sub Command1_Click()
' Langsung simpan gambar
If Text1 = "" Then MsgBox "Isi nama dulu": Exit Sub
Dim sumber, Path As String
CommonDialog1.DialogTitle = "Pilih Gambar"
CommonDialog1.Filter = "Picture (*.Jpg; *.Jpeg; *.Bmp; *.Gif)|*.jpg; *.jpeg; *.bmp; *.gif"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
    sumber = CommonDialog1.FileName
    Image1.Picture = LoadPicture(sumber)
    With Adodc1.Recordset
        .AddNew
        .Fields.Item(1).Value = Text1
        Set gambarku = New ADODB.Stream
        gambarku.Type = adTypeBinary
        gambarku.Open
        gambarku.LoadFromFile CommonDialog1.FileName
        .Fields.Item(2).Value = gambarku.Read
        .Update
    End With
    MsgBox "Data ditambahkan"
    Image1.Picture = LoadPicture("")
End If
End Sub

Kata kunci pencarian: Cara simpan gambar atau foto ke database Access dan Visual Basic 6.0.

Okey… Sekian dulu tutorial dari saya semoga bermanfaat buat sahabat CB, jangan lupa di save projectnya. Silahkan beri tanggapan, apakah penjelasan saya mudah dipahami atau tidak supaya saya bisa memperbaiki cara menjelaskan pada tutorial berikutnya, dan berikan juga +1 Google sahabat di tulisan ini

Kami (Catatan Belajar) juga hadir di Facebook, like kami ya klik tombol berikut:

 
Signature :

No copy paste content please…. If you want do that, please include the original source. Original Post by catatanbelajar.com, written by Ivo Idham Perdameian, Google plus profile.

  1. Terima Kasih Banyak sangat – sangat membantu.. :grin: :mrgreen:

  2. Jossssssss,…..top beudh

  3. LOK PAKE SQL SERVER 2000 GMANA MAS BRO..
    TIPE DATA N SOURCECODENYA
    PLEASE…
    TLONG KRIM KE
    MEMET_SKOM@YAHOO.COM

  4. mau tanya, “gambarku” itu nama dari apanya ya?

  5. oh, oke terima kasih. :D
    1 lagi mas, foto bisa ngak dimasukkan kedalam datagrid ?

  6. kalo common dialog nya g ada d component gmana mas bro?

  7. mas .. bisa bantu gak ?
    aku bikin program untuk simpan gambar, tapi masalahnya ketika sumber dari gambar itu dihapus, misal dari folder “gambar” kemudian muncul pesan eror … karena sumber gambar sudah dihapus

    kira2 kalo pake cara di atas bisa gak ya? meski gambar sudah dihapus dari sumbernya tapi tetap bisa muncul

  8. terima kasih mas .. saya coba dulu,

  9. mas .. kenapa di project aku ADODB.Stream nya tidak berfungsi ya ?

    kalo pake selain adodb.stream apa bisa ?

  10. iya bener sudah bisa…
    mas minta tolong .. aku mau nampilin gambar lewat pencarian kode barang, tapi selalu muncul error dengan peringatan “Invalid Picture” begini source codenya

    Private Sub TampilkanData()
        With rsBarang
            If Not rsBarang.EOF Then
                TxtNamaBrg = rsBarang!Namabrg
                TxtHargaBeliBrg = rsBarang!HargaBeli
                TxtHargaJualBrg = rsBarang!HargaJual
                TxtJumlah = rsBarang!JumlahBrg
                TxtSatuan = rsBarang!Satuan
                TxtKeterangan = rsBarang!keterangan
                TxtKodeSp = rsBarang!Kodesp
                
                Set gambarku = New ADODB.Stream
                gambarku.Type = adTypeBinary
                gambarku.Open
                
                
                gambarku.Write rsBarang!foto
                ImgBrg.Picture = LoadPicture(App.Path & "Temp")
                ImgBrg.Picture = LoadPicture
                 
                CommonDialog1.FileName = rsBarang!foto
                ImgBrg.Picture = LoadPicture(CommonDialog1.FileName)
            End If
        End With
    End Sub
    

    apa yang salah ya ?

    • Oke coba ganti kayak begini:

          Set gambarku = New ADODB.Stream
          gambarku.Type = adTypeBinary
          gambarku.Open
          
          
          gambarku.Write rsBarang!foto  
          ' simpan temporary gambar ke file  
          gambarku.SaveToFile App.Path & "Temp", adSaveCreateOverWrite
          ' temporary gambar yang disimpan ke file tadi di tampilkan ke Image1
          Image1.Picture = LoadPicture(App.Path & "Temp")
          ' hapus temporary gambar
          Kill App.Path & "Temp"
      

      Kodemu di atas pake CommonDialog1 buat apa?

  11. masih belum bisa mas .. erornya saat temporary gambar yang disimpan di tampilkan

  12. mas, pas di Run kok malah yang keluar MsgBox nya? yang tulisannya “koneksi tidak bisa dibuka,pastikan databasenya ada dan tidak sedang digunakan oleh aplikasi lain”. yang salah apanya ya?

  13. kok programnya pas di Run malah yang keluar MsgBox nya?yang “koneksi tidak dpt dibuka, pastikan databasenya ada dan tidak sedang dibuka oleh aplikasi lain”, yang salah apanya ya?

  14. mas, ko punyaku kalau dirun selalu tampil “koneksi tidak bisa dibuka “. apa salahnya? padahal dari awal saya selalu melihat petunjukkan.

  15. klo dirun selalu ada ‘syntax error in from clause’ dan yang selalu diwarnai kuning itu ada diform_load adodc1.refresh. apa salahnya ya?

  16. Mas aku ga bisa aktifin ini
    Microsoft ActiveX Data Object 2.8 Library

    walaupun sudah di OK berulang kali tetep ga aktif

  17. saya sudah coba tapi gagal terus bisa minta program yg sudah running tidak pak?

    Mohon bantuannya

    terima kasih

  18. mas , saya coba,, tapi ada msg box ” path not found” apa artinya ya mas?
    mohon bantuannyaa :D makaish

  19. mas, itukan file jpg masuk ke databse, gmn cara data gmabar yg di dalam databse di keluarkan dan di save menjadi file jpg kembali ?

  20. mas g bisa e…keluar tulisannya compile error:
    user-defined type not defined

  21. @ivo

    mas klw type data nya longblob bsa gk soal na saya pke xampp untuk database na…

    trims.

  22. masss,, bagai mana cara agar tdk harus conect lagi

  23. gan codingnya bnyk yg kepotong , gw mw yg lengkap dong, makum gw newbie :(

  24. kirimin k email gw coding yg lengkap dong klo bole, d atas bnyk yg kepotong :(

  25. eh ada scroll wkwkwk

  26. mas bro kode untuk membuka koneksi ke database nya kok error ya ?
    mohon penjelasannya makasih

    • Saya sudah uji dengan baik mas bro sebelum posting. Jadi saya sarankan untuk mengecek kembali kode yang mas bro salin dan pastikan ikuti langkahnya dengan teliti baris perbaris. Jika masih ada error (muncul pesan kesalahan) silahkan tunjukan pesan errornya kalau perlu di tampilan layarnya diambil gambarnya (screenshot) dan gambarnya bisa diupload pada situs layanan gambar seperti imageshack.us atau imgur.com dan berikan tautan (link) gambarnya supaya bisa ditangani lebih lanjut. Oke mantep :D

  27. Nurul Hidayatullah

    Salam kenal Mas
    Aku punya masalah tentang vb.6, bisa diberikan contoh kode untuk menampilkan pesan bahwa gambar atau foto yang dipilih terlalu besar. mohon pencerahannya Mas
    Sekian dan terima kasih.

    • Besar ukuran filenya atau besar dimensinya?
      Klo besar dimensinya vb 6:

      With Image1
        MsgBox .ScaleX(.Picture.Width, vbHimetric, vbPixels)
        MsgBox .ScaleY(.Picture.Height, vbHimetric, vbPixels)
      End With
      

      Kalau ukuran file:

      Private Sub Command1_Click()
      Dim MySize As Long
      If Dir$("c:\program files\myfile.txt") <> vbNullString Then
         MySize = FileLen("c:\program files\myfile.txt")
      Else
         MsgBox "file doesn't exist"
      End If
      End Sub
      

      Silahkan dicoba dulu, saya belum nyoba masalahnya.

  28. halo mas, mohon bantuannya, kalo menampilkan photo di form penggajian gmna tuh mas?

  29. Nurul Hidayatullah

    Ni contoh kodenya mas

    Private Sub cmdcri_Click()
    CmGmbr.Filter = “Gambar Format JPEG (*.jpg) | *.jpg”
    CmGmbr.ShowOpen
    Gmbr1.Picture = LoadPicture(CmGmbr.FileName)
    Gambar = CmGmbr.FileName
    End Sub

    jadi pada saat foto yang dipilih lebih dari yang ditentukan misalnya 700 kb. maka muncul pesan foto yang anda pilih terlalu besar, ukuran foto maksimal 700 kb.

    Mohon pencerahannya mas.

    • Coba gini (saya belum coba lho):

      Private Sub Command1_Click()
      Dim MySize As Long
      CmGmbr.Filter = “Gambar Format JPEG (*.jpg) | *.jpg”
      CmGmbr.ShowOpen
      If Dir$(CmGmbr.FileName) <> vbNullString Then
         MySize = FileLen(CmGmbr.FileName)
         ' 700000 itu adalah 700 kb. Karena 1 kb = 1000 byte Maka 700 kb = 700 * 1000 = 700000 byte
         if MySize > 700000 then msgbox "foto yang anda pilih terlalu besar, ukuran foto maksimal 700 kb":exit sub 
         Gmbr1.Picture = LoadPicture(CmGmbr.FileName)
         Gambar = CmGmbr.FileName
      Else
         MsgBox "file doesn't exist"
      End If
      End Sub
      
  30. Nurul Hidayatullah

    Terima kasih banyak Mas, atas bantuannya,,,
    Soalnya kode yang Anda kasih udah berhasil.
    Sekali lagi terima kasih banyak.

  31. Nurul Hidayatullah

    Selamat pagi Mas
    Maaf mau nanya lagi, bisa minta contoh kode hasil output dalam bentuk pdf.

  32. pagi mas saya mau nanya nih,
    kalo ditambah tombol delete buat ngehapus databasenya gmn ya ama tombol simpannya jd manual bukan yg otomatis pas ngeload gmbr langsung kesimpan datanya.
    soalnya saya lg coba bikin database karywan beserta fotonya.
    mohon bimbingannya trims :)

    • Oh… Oke.
      Ubah barisan kode paling atas code form yang bertujuan untuk mendefenisi variabel yang akan kita butuhkan menjadi :

      ' sebelumnya : Dim strconnect As String
      Dim strconnect, lokasi As String
      

      Setelah itu, ini saya salinkan tombol simpannya yg sebelumnya:

      Private Sub Command1_Click()
      ' Langsung simpan gambar
      If Text1 = "" Then MsgBox "Isi nama dulu": Exit Sub
      Dim sumber, Path As String
      CommonDialog1.DialogTitle = "Pilih Gambar"
      CommonDialog1.Filter = "Picture (*.Jpg; *.Jpeg; *.Bmp; *.Gif)|*.jpg; *.jpeg; *.bmp; *.gif"
      CommonDialog1.ShowOpen
      If CommonDialog1.FileName <> "" Then
          sumber = CommonDialog1.FileName
          Image1.Picture = LoadPicture(sumber)
          With Adodc1.Recordset
              .AddNew
              .Fields.Item(1).Value = Text1
              Set gambarku = New ADODB.Stream
              gambarku.Type = adTypeBinary
              gambarku.Open
              gambarku.LoadFromFile CommonDialog1.FileName
              .Fields.Item(2).Value = gambarku.Read
              .Update
          End With
          MsgBox "Data ditambahkan"
          Image1.Picture = LoadPicture("")
      End If
      End Sub
      

      Harus diubah kayak gini untuk hanya mengambil gambar:

      Private Sub Command1_Click()
      CommonDialog1.DialogTitle = "Pilih Gambar"
      CommonDialog1.Filter = "Picture (*.Jpg; *.Jpeg; *.Bmp; *.Gif)|*.jpg; *.jpeg; *.bmp; *.gif"
      CommonDialog1.ShowOpen
      If CommonDialog1.FileName <> "" Then
          lokasi = CommonDialog1.FileName
          Image1.Picture = LoadPicture(lokasi)
      End If
      End Sub
      

      Lalu tambahkan tombol satu lagi dan isi kodenya begini untuk menyimpan ke database:

      Private Sub Command2_Click()
      ' Langsung simpan gambar
      If Text1 = "" Then MsgBox "Isi nama dulu": Exit Sub
      If Image1.Picture Is Nothing Then MsgBox "Isi gambar dulu": Exit Sub
      Dim sumber, Path As String
          With Adodc1.Recordset
              .AddNew
              .Fields.Item(1).Value = Text1
              Set gambarku = New ADODB.Stream
              gambarku.Type = adTypeBinary
              gambarku.Open
              gambarku.LoadFromFile lokasi
              .Fields.Item(2).Value = gambarku.Read
              .Update
          End With
          MsgBox "Data ditambahkan"
          Image1.Picture = LoadPicture("")
          lokasi = ""
      End Sub
      

      Untuk tombol hapusnya nanti saya tambahkan lagi, silahkan balas dulu komentar saya ini supaya saya tidak sia-sia menulis panjang-panjang :D.

  33. Nurul Hidayatullah

    Makasih mas atas bantuannya.
    Ntar aku coba kodenya…

  34. Nurul Hidayatullah

    Source kode untuk menghasilkan output, jadi outputnya dalam bentuk pdf..

  35. ok terimakasih mas sdh mau berbagi :)
    izin buat nyoba dulu :)

Tinggalkan Balasan