January 6, 2009

Bagaimana MengInsert gambar kedalam Table dan menampilkan kembali ke PictureBox

Ini adalah artikel pertama di awal tahun 2009 M/1430 H. sebenarnya udah lama sich mau posting artikel ini, tapi ada kendala sedikit, tapi Alhamdulillah hari ini artikel ini bisa release.
Artikel ini membahas bagaimana membuat program untuk memasukkan gambar ke database dan bagaimana menampilkan file gambar tersebut kedalam picture box.. Pada artikel ini saya menggunakan Vb 2008 express dengan database SQL 2008 express. Tapi ini bisa di gunakan untuk versi-versi sebelumnya.


Tahap pertama adalah dengan membuat form seperti gambar diatas, dan jangan lupa tambahkan 4 button, 1 textbox, OpenfileDialog dan Picturebox.
Di asumsikan kita memiliki table dengan nama TbPic dengan field (ID dan Pic). Sekarang kita masuk ke coding.
Untuk menampilkan file gambar kedalam Picture box ikuti sintaks berikut.
OFD.Filter = "Image Files (*.jpg, *.bmp, *.gif, *.png)*.jpg; *.bmp; *.gif; *.png"
OFD.ShowDialog()
txtFileName.Text = OFD.FileName
txtFileName.SelectionStart = txtFileName.Text.Length
If Trim(txtFileName.Text) <> "" Then
PicBox.Image = Image.FromFile(txtFileName.Text)
End If
Ikuti sintaks dibawah untuk memasukkan gambar kedalam table.
Try
Dim ms As New System.IO.MemoryStream()
PicBox.Image.Save(ms, PicBox.Image.RawFormat)
Dim CPic() As Byte = ms.GetBuffer
ms.Close()

Dim MyConnection As AccessData.DataBaseConnection = New AccessData.DataBaseConnection

Dim myCommand As SqlCommand = New SqlCommand("Insert Into TbPic (ID,Pic) values (@ID,@Pic)", MyConnection.open)

myCommand.CommandType = CommandType.Text

Dim parameterID As SqlParameter = New SqlParameter("@ID", SqlDbType.VarChar)
parameterID.Value = "1"

Dim parameterPic As SqlParameter = New SqlParameter("@Pic", SqlDbType.Image)
parameterPic.Value = CPic
With myCommand.Parameters
.Add(parameterID)
.Add(parameterPic)
End With
Dim result As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)


Catch ex As Exception
MsgBox(ex.Message)
Finally
MyConnection.close()
End Try

Lalu bagaimana caranya untuk menampilkan kembali tersebut ke dalam picture box. Berikut sintaks nya
Try
Dim arr() As Byte

objCommand = MyConnection.open.CreateCommand
objCommand.CommandText = ("select Pic from TbPic;")
objdatareader = objCommand.ExecuteReader
objdatareader.Read()
arr = objdatareader.Item("Pic")
PicBox.Image = Image.FromStream(New IO.MemoryStream(arr))
Catch ex As Exception
MsgBox(ex.Message)
Finally
MyConnection.close()
End Try
Mudah-mudahan artikel ini dapat membantu rekan-rekan yang request maupun tidak tentang artikel ini..
Wassalam

81 comments:

BartIQY said...

Makasih uda mau bagi ilmunya moga2 mendapat balasan atas kebaikannya, oh ya mas ada ga cara untuk memperkecil ukuran Log file database SQL server?
Satu lagi gimana cara untuk mengecek keberadaan suatu gambar dalam database, gini teorinya sitaxnya: melakukan pengecekan terhadap primeri key ID jika ada maka melakukan pengecekan lagi terhadap tabel Pic, jika terdapat gambar maka tampilkan di picturbox tapi jika tidak ada maka picturbox.image = nothing

Junindar said...

untuk memperkecil log liat di link berikut http://www.broad-lea.com/sql_server/sql_reduce_log_size.html

coba seperti ini
If arr.Length <> Nothing Then
PicBox.Image = Image.FromStream(New IO.MemoryStream(arr))
Else
PicBox.Image = Nothing
End If

atau length di ganti 0 or -1..

BartIQY said...

Thanks atas infonya mas junindar

Anonymous said...

sy pemula yang belajar vb.mkash bngt atas codenya,tolong donk yang pke sintak sqlnya dan tabel sql buat gambar peke tipe data apanya?

Junindar said...

Thanks atas input nya...tapi untuk tipe datanya apa bisa dilihat dari sintaks nya kok..tapi kedepan akan saya usahakan gunain gambar biar lebih jelas lagi.. :)

Anonymous said...

saya yola nak smk kls 2

saya mo minta ide nih om saya salah satu pembeli buku om

membuat aplikasi penjualan itu

minta ide buat program yg simpel tp ada harga jual nya

bis nya klw nggak da harga jual

saya nggak naik kls om..........

Junindar said...

coba buat program reminder ....
kamu bisa liat code nya di blog ini...simple dan banyak fungsi nya..

Anonymous said...

tolong tampilin ong reminer nya

sayaa nggak tw om......

Junindar said...

http://junindar.blogspot.com/2008/11/reminder-program-dengan-vbnet.html

ini link nya download..dan install di PC kamu ..
buka help nya...disitu ada full source code nya

Anonymous said...

Mas saya Mhasiswa Negeri, mau nanya, untuk coding di PixBox, itu harus ada deklarasi dulu ga.. saya copy ko benyak yang error tlong penjelasannya+ nama2 toolboxnya
terimakasih

Junindar said...

waduh, ga ngerti saya pertnyaannya..
Maksudnya pada kasus apa??
Maksudnya untuk komponen2 pada toolbox ya??wahh bisa jadi buku tebal kalau saya jelasin satu..saran liat namanya search di MSDN atau google untuk sample penggunaan nya...

Anonymous said...

aloooo ka junindar..
kenalkan saya ferry...
ka, mau tnya neh...
pny program ttg sistem pakar ga???
pk vb.net 2005 n database sql server...
aku ada tgs neh...ada yg ga aku ngerti...
yg ga aku ngerti tuh caranya buat hubungan 1 pertanyaan ke pertanyaan yg laen...gt...
thanks b4 ka...

Junindar said...

wahhhh..jarang sekali saya dengar sistem pakar pake vb.net...kan ada software khusus nya..untuk kita isi basis pengetahuan nya..

Anonymous said...

mkasih dh bgi2 ilmu tolong donk yang pke vb 2005nya

Junindar said...

di sini saya menggunakan vb 2003 dan 2008..tapi untuk code ga jauh beda kok..jadi ga ada masalah

PhAnToM... said...

Mem mas,
aku mo nanya,
itu yang OFD itu pa ya?
cos eror pad bgaian itu,

eroor disebabkan karena lum dideklarasi,
nah nama untuk mendeklarasina ap ya?
tks in advance.

Badewei,Blog na bagus bgt mas,
semuana ttg vb jadina ga pusing2 nyari referensi lagi deh:)

Junindar said...

OFD = Open File Dialog.
Caranya Drag Pada ToolBox komponen ini (OPen file dialog).
dan ubah Properties Name menjadi OFD.
pasti OK..

PhAnToM... said...

malam mas junindar,
saya udah bisa save gambar kedalam DB tetapi ada masalah ketika ingin menampilkan gambar yang telah disimpan,,

Apabila saya memasukkan 4 gambar, maka ketika melakukan 'View' yang muncul yang hanya gambar yang pertma saja(inginnya gambar yang ketiga)

apa dikarenakan ditulis seperti ini:

Dim parameterID As SqlParameter = New SqlParameter("@nama", SqlDbType.VarChar)
parameterID.Value = "1 ",

ap ad solusinya mas junindar,
mohon pencerahannya.
Tks

Junindar said...

kalau gitu ubah aja criteria pencarian nya untuk gambar ke tiga..
di buat custom mas..jangan ubah dari code..misal buat pake textbox, trus criteria nya refer ke textbox..

Info Comp said...

Mas mau nanya nih.. Dalam form baru saya tambahkan ADODC dan datagrid, lalu sy tekan F5 dan datanya sudah tampil dalam datagrid, NIM dan NAMA berikut isinya. Pertanyaannya :
1. Bila saya ingin menambahkan command button untuk merubah huruf kecil yg ada dalam kolom NAMA dalam datagrid menjadi huruf besar, gimana caranya? Terima kasih sebelumnya....

Junindar said...

ini di Vb brapa mas?? 6 ya??

Info Comp said...

iya mas VB 6, jadi dalam kolom NAMA ada beberapa nama dan sy mau pake command button untuk merubah semua nama dalam kolom NAMA menjadi huruf besar semua, saya baru bisa merubah bila di klik terlebih dahulu salah satu nama dan klik button, jadi satu satu. sy pengen semuanya sekaligus bisa gak ya mas tanpa harus di klik namanya satu satu?

Junindar said...

Saya VB 6 udah lama ga pake...
tapi kalau mau buat Upper dari SQL nya aja..kalau di SQL server seperti ini SELECT { fn UCASE(Description) } AS DESCRIP
FROM T_Material.

Info Comp said...

Siiiip...thanks yach mas...!!!

budiyanto said...

mas, sy mau ty knp saya coba codingnya ada error bagian ini terutama As AccessData.DatabaseConnection

Dim MyConnection As AccessData.DataBaseConnection = New AccessData.DataBaseConnection


dimana letak connection stringnya yach, btw database yang digunakan pake apa? truz tipe data masing2 field apa yach?

Tq

my email : budiyanto_chen@ymail.com

Junindar said...

coba kamu cek artikel saya yang ke 13..untuk sample ini saya menggunakan SQL server 2000..
untuk field type bisa di lihat di coding..untuk field pertama saya menggunakan Varchar, untuk field penyimpanan gambar saya menggunakan "image"..

Anonymous said...

mas bs tahap lebih jelas lg g,mf soalnya masih pemula jd masih bingung.makasih

Junindar said...

kirim email ke saya aja.. junindar@gmail.com
kirim project yang kamu buat

dimasiano said...

terima kasih banyak pak atas pertanyaan saya yang telah dijawab, sangat membantu sekali, matursuwun..

sumadi said...

Mas, saya mau tanya ttg picturebox, ketika berhasil diload dari database dan tdk terjadi perubahan di picturebox lalu disimpan lagi muncul pesan "A generic error occurred in GDI+" itu kenapa yah ?

Junindar, MVP VB said...

Bisa kasih sintaks kamu ??

Dello... said...

assalamualaikum mas junindar...
mau nanya nih, aku ada master product, ditabelnya aku tambahin field gambar tipenya image disetnya sih allow null, trus di formnya ada picture boxnya, yang aku mau tanyain gimana cara validasi pada saat save data ke dalam database supaya tidak error apabila gambarnya tidak dimasukkan, karna field image di tabel productnya aku set "allow null"... makasih mas atas bimbingannya

Junindar, MVP VB said...

Mas "Allow Null" nya "Yes" atau "No" ?? kalau yes, ga ada masalah donk kalau ga di masukkan gambar nya..tapi kalau no, baru bermasalah.. tapi kok gambar ga boleh kosong? bisa di jelaskan

Dello... said...

aku setnya "yes" untuk allow nullnya, maksud aku gini mas aku udah ada script insert data untuk ke databasennya, cuma aku kombinasikan antara coding aku sama dari contoh punya mas ini jadinya gini nih mas...

query = "insert into MstItem(Kd_Item, Nm_Item, Hrgsat, Satuan, Kd_Jenis_Item, Gambar) values ('" & (txtKdItem.Text) & "','" & (txtNmItem.Text) & "','" & Val(txtHarsat.Text) & "','" & (txtSatuan.Text) & "','" & (cboKdJenisItem.Text) & "',@Pic)"

nah kan untuk value gambarnya menggunakan parameter (@pic), nah validasi pada saat apabila gambar tsb tidak dimasukkan gimana caranya? karna aku udah coba begini hasilnya msh error ...
if picturebox.image = Nothing Then
messagebox.show("")
end if

Anonymous said...

artikel ke 13 yg mn y ?
makasih sblmny
klo bs bls skrg y, soalny hari ini mo d kmpul tgs sy, makasih

El's_Blog said...

Terima kasih atas artikelnya.

Mas saya ingin tanya : bagaimana codingnya bila tipe datanya diganti dgn varbinary? dan bukan image.

banyak artikel dari internet memakai binary reader yg memaksa adanya path file image, padahal saya ingin mengambil image langsung dari picturebox.image tidak pake path file image tsb.

Saya berharap mas mau membantu.

terima kasih

Junindar, MVP VB said...

banyak alasan kenapa menggunakan path untuk menyimpan gambar..
kalau langsung menyimpan kedalam tabel akan membebani jika data nya dalam jumlah yang banyak..
kalau tidak mau menggunakan path, ya ikuti saja artikel saya ini..

EL said...

TERIMA KASIH ATAS BALASANNYA.

Mas, maksud saya spt ini:

Saya ingin menyimpan image di SQL server bukan dengan tipe data image tetapi dengan tipe varbinary karena kalau tdk salah Microsoft tidak akan memakai tipe image pada SQL Server versi yg akan datang.

Mungkin mas ada sedikit code untuk menyimpan di tipe varbinary krn mungkin ada perbedaan dgn tipe image.

Terima Kasih.Sukses selalu.

jimmy said...

mas junindar...saya ingin membuat aplikasi yang bisa upload gambar pada tiap barang di database,saat code dari mas junindar saya copy terdapat error2 berupa Error 1Type 'AccessData.DataBaseConnection' is not defined.
bisa tidak kirimkan versi lengkapnya ke email saya di zynesys@yahoo.com
maaf,saya masih pemula sekali...mohon bantuannya,terimakasih...

Junindar, MVP VB said...

Sebelumnya buat dulu Class DatabaseConnection...
liat artikel sy step 13

Diva said...

makasih banyak ya mas, bantu2 saya neh buat belajar :D

tjokop web said...

kalau DB nya menggunakan Ms. Access apa yang harus dirubah ?
makasih sebelumnya

Junindar, MVP VB said...

Access 2003, tipe datanya OLE Object..
ini sintaks nya ..

Private Function SaveImage() As OleDbDataReader


Dim arr() As Byte
FileOpen(1, txtFileName.Text, OpenMode.Binary, OpenAccess.Read, OpenShare.Shared)
ReDim arr(FileLen(txtFileName.Text) - 1)
FileGet(1, arr)
FileClose(1)

Dim conn As OleDbConnection = New OleDbConnection(strConn)

Dim myCommand As OleDbCommand = New OleDbCommand("Insert Into Table1 (img) values (@Pic)", conn)
conn.Open()
myCommand.CommandType = CommandType.Text



Dim parameterPic As OleDbParameter = New OleDbParameter("@pic", OleDbType.LongVarBinary)
parameterPic.Value = arr
With myCommand.Parameters
.Add(parameterPic)
End With
Dim result As OleDbDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)


End Function

Saputra Dwi Nurcahya said...

terima kasih sangat membantu mas..

mas minta tolong pencerahannya karena saya pakai database mysql..

trims sebelumnya

Anonymous said...

pak , bagaimana cara upload file pdf, word, dan bagaimana agar bisa di tampilkan saat di klik, terimakasih.

Junindar, MVP VB said...

Simpan path dan nama filename kedalam table..trus untuk membuka file tersebut, gunakan sintaks dibawah..
System.Diagnostics.Process.Start(path & Filename)

Anonymous said...

tau ndak gimana carax mbatasi file gambar hanya 20 kb aja d vb.net?

Junindar, MVP VB said...

Bisa di protek pada saat user load gambar seperti berikut contoh nya.. (contoh ini untuk gbr berukuran 512 KB)

Try
OFD.Filter = "Image Files (*.JPEG, *.jpg, *.bmp, *.gif, *.png)|*.JPEG; *.jpg; *.bmp; *.gif; *.png"

If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
txtPath.Text = OFD.FileName
txtPath.SelectionStart = txtPath.Text.Length
If Trim(txtPath.Text) <> "" Then
Dim MyFile As New FileInfo(txtPath.Text)
Dim FileSize As Long = MyFile.Length / 1024
If FileSize > 512 Then
MsgBox("Maksimum gambar 512 KB", MsgBoxStyle.Exclamation, "tes")
PbImage.Image = Nothing
txtPath.Text = ""
Exit Sub
End If
PbImage.Image = Image.FromFile(txtPath.Text)


End If
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try

Anonymous said...

saya nelson pak, setelah melihat program penyimpanan gambar diatas saya penasaran untuk mencobanya. tapi sayangnya tidak bisa pak, saya biasanya pake acces pak pake sql jarang dan kurang mengerti. klw boleh, bisa minta tolong projectnya pak? kirim ke email saya ya pak?
Nelson_munthe@yahoo.co.id

thanks before ya pak

xier said...

bos mau tanya

saya sedang membuat aplikasi sistem pakar pake vb 2010+acces Coding untuk ke pertanyaan atau solusi selanjutnya gimana ya. Di form itu ada 2 button ya dan tidak. Di databasenya udah dbuat jika ya ke mana ,jika tidak kemana berdasakan id pertanyaan dan id solusi. Codingnya gmana ya mohon bantuannya?

Oh iya sya lihat komennya ktanya ada software khusus untuk sistem pakar sofwarenya apa ya?
Thx be4

Junindar, MVP VB said...

Sistem pakar, pakai Visual Prolog kalau ga salah.. :) :)

opan said...

mas, mo numpang nanya,,kan dibuku mas yg vb 2010 + access 2010 kan koneksi ke databasenya dari My.setting.....
dan ga pakai password,,nah pertanyaan saya kalo mau databasenya pakai password gimana ya??

Junindar, MVP VB said...

coba kesini http://connectionstrings.com/access-2007

opan said...

Thank's mas,,,,:)

Erick said...

Bagus Postingnya gan, selama ini saya silent reader aja...
Ijin Observasi cara Save & Load Image disini gan...

Anonymous said...

terimakasih bnyak atas artikelnya...

Ikhwan S said...

Bagaimana caranya supaya data file gambar di tampung sementara di listview kemudian di simpan ke database krn listview ini berfungsi sebagai penampung sementara kemudian di insert ke database semua data yang ada di listview
makasih infox dan jawabanx

Junindar, MVP VB said...

gambar yg disimpan berupa apa??

Ikhwan S said...

Gambar yang di simpan bisa berbentuk Jpeg/jpge dan BMP Bang
Makasih atas Refley nya

Junindar, MVP VB said...

maksudnya image nya disimpan di database, atau hanya path nya saja

Ikhwan S said...

Yang Saya simpan ke database adalah gambarnya, bukan pathnya karena untuk kemamanan dan kemudahan dalam mengembalikan jika terjadi sesuatu. dan listview untuk record sementara seblm menyimpan ke database serta dlm sekali simpan gambar bisa lebih dari satu di dalam listview tsb.
Saya tdk memerlukan untuk menampilkan gambarnya dlm listview tapi "memory Stream" gambar dapat di simpan ke database dan gambar bisa di tampilkan melalui laporan spt di Active report / Cristal Report. Makasih udah menanggapinya :)

Deddy Gunawan said...

Malam Mas Jun, Aku ada sedikit masalah syntax penyimpanan gambar sbb:
Private Sub Simpan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Simpan.Click
If cmbNmStyle.Text = "" Then Exit Sub
If cmbKdModel.Text = "" Then Exit Sub
If cmbWarna.Text = "" Then Exit Sub
If cmbSize.Text = "" Then Exit Sub
If cmbKdFac.Text = "" Then Exit Sub
Try
Call Koneksi()

Dim ms1 As New MemoryStream
ImgFoto1.Image.Save(ms1, ImgFoto1.Image.RawFormat)
Dim arrayImage1() As Byte = ms1.GetBuffer
ms1.Close()
Dim SQL As String
SQL = "Insert into tbl_kodeprod values('" & txtKdProd.Text & "','" & cmbNoCut.Text & "','" & cmbNoPO.Text & "','" & cmbNmStyle.Text & "','" & cmbKdModel.Text & "','" & cmbWarna.Text & "','" & cmbSize.Text & "','" & txtQtyOrder.Text & "','" & txtQtyProd.Text & "','" & cmbKdFac.Text & "','" & txtTargetProd.Text & "','" & dtTglProd.Text & "','" & dtTglExport.Text & "','" & txtKeterangan.Text & "',?)"
Dim DMLSQL As New System.Data.OleDb.OleDbCommand(SQL, Database)
DMLSQL.Parameters.Add("@Foto1", SqlDbType.Image).Value = arrayImage1

DMLSQL.ExecuteNonQuery()

Call Kosong()
Catch ex As Exception
MsgBox(ex.ToString())
End Try


End Sub

syntax tsb sudah berjalan untuk proses simpan ke database, yg ingin aku tanyakan bgm caranya agar apabila gambar kosong proses simapn tetap berjalan dengan asumsi gambar kosong. mohon petunjuknya. terima kasih.

Deddy Gunawan said...

Maaf tambahan mas Jun,
Dari syntax diatas, bagaimana caranya simpan gambar lebih dari satu gambar?

Junindar, MVP VB said...

@Deddy : untuk gampangnya buat default picture untuk gambar kosong

Anonymous said...

mas mo tanya klo tampilin data dari tabel header ma detail dalam satu form gimana yach...trims

Junindar, MVP VB said...

tinggal bermain di query aja mas..
btw, mau nampilin nya dimana??
bisa di jelaskan

Anonymous said...

saya ingin menapilkan pada form pelatihan, lebih jelasnya saya kirim ke email mas junidar..terimakasih

Linux For Human Beings said...

Sebelumnya saya berterima kasih kepada Pak Junindar. Blog ini sangat bermanfaat untuk saya dalam mempelajari Matakuliah. Kebetulan saya Mahasiswa UIB Semester 2 Jurusan Sistem Informasi.

Moga Pak Junindar sehat dan sukses selalu.. Keep Sharing. :)

dizi said...

ini yang orang banyak cari.... thanks ya

Agung Pangestu said...

klo cara menampilkan foto di cristalreport gimana ya mas?

Anonymous said...

mas junindar.. saya mau tanya.. saya membuat aplikasi dimana ada fotonya, dan saya menggunakan path, sejauh ini berhasil di save ke database, yang jadi pertanyaannya bagaimana cara memanggilnya dari database jika karakter gambar di database berfomat "varchar(max)" yang isinya contoh "c:\gambar" tolonga yang mas dah stack overflow ni... :D

kodirya said...

misi,, saya mau tanya klo cara menampilkan soal word dari komputer ke vb.netnya gmnaa yaa,? trus setelah itu di klik tombol start maka muncul soal di aplikasinya,, tolongin mass,, makasih,,,

kodirya said...

misi,, saya mau tanya klo cara menampilkan soal word dari komputer ke vb.netnya gmnaa yaa,? trus setelah itu di klik tombol start maka muncul soal di aplikasinya,, tolongin mass,, makasih,,,

kodirya said...

misi,, saya mau tanya klo cara menampilkan soal word dari komputer ke vb.netnya gmnaa yaa,? trus setelah itu di klik tombol start maka muncul soal di aplikasinya,, tolongin mass,, makasih,,,

syifa gusponsa said...

mas ,aku connect vb 6 ke sql
terus aku bikin button update,jadi saat aku clik data yg ada di dtbase muncul, semua data nya sih muncul.
tapi image yg udah aku load itu ga ke show, tapi di database nya filename image nya ada kok,cuma gak bisa muncul aja itu gmna yah thanks

syifa gusponsa said...

mas ,aku connect vb 6 ke sql
terus aku bikin button update,jadi saat aku clik data yg ada di dtbase muncul, semua data nya sih muncul.
tapi image yg udah aku load itu ga ke show, tapi di database nya filename image nya ada kok,cuma gak bisa muncul aja itu gmna yah thanks

Anonymous said...

makasi banyak gan,,,
mantap gan....

sukses trus

yovinianus paonganan said...

bagaimana kalau dari datagrid ke image?mohon pencerahannya

Rolan Walman Sihotang said...

mau nanya bg gimana cara mengatur datagrid supaya menampilkan gambar dari database sql/access ??? kalau bisa coding vbnya kash tau bg. Mohon bntuannya bg buat tgas sidang

Junindar, MVP VB said...

@Rolan : bisa liat disini http://junindar.blogspot.co.id/2009/01/menampilkan-gambar-pada-datagridview.html

ibrahim Muis said...

Bang mau nanya bang...
Aku kan mau masukin tuh file gambar pada dgv nya tapi di datagritnya ga tambil bang...cuma ada tanda silang...kalo di klik gambar nya muncul pesan "the following exception occurred in the datagridview:".
Nah itu kenapa ya bang...mohon bantuannya bang