[Tanya] cara menampilkan data Image dari Mysql ke picturebox Di VB.Net-Collection of common programming errors
selamat sore master..
sebelumnya saya membuat program untuk menyimpan dan menampilkan foto dari database mysql,,
file yg disimpan kedalam database = .Jpeg dan .jpg
nah untuk field2 yang ada didatabase saya buat seperti ini :
===================================
Idfoto int Not Null (Set Primary Key) Auto Increment
Nama Varchar 150 Null
Foto MediumBlob Not Nul
===================================
dan desain form saya buat seperti ini :
setelah itu, saya ketik code untuk proses simpan dan menampilkan gambarnya kedalam picturebox, seperti ini :
Imports MySql.Data Imports MySql.Data.MySqlClient Imports System.IO Public Class XtraForm1 Private conn As New MySqlClient.MySqlConnection Private strSql As String = String.Empty Dim sql_connection As MySqlClient.MySqlConnection = conn Dim sql_command As MySqlClient.MySqlCommand Dim sql_reader As MySqlClient.MySqlDataReader Public Sub New() InitializeComponent() Dim strConn As String = "server=localhost;uid=mustafa;pwd=123asdf;database=testIQ;Port=3306" conn.ConnectionString = strConn conn.Open() End Sub Private Sub SaveGambar(ByVal namanya As String) Dim cmd As New MySqlCommand Dim FileSize As UInt32 Dim rawData() As Byte Dim fs As FileStream Try fs = New FileStream(namanya, FileMode.Open, FileAccess.Read) FileSize = fs.Length rawData = New Byte(FileSize) {} fs.Read(rawData, 0, FileSize) fs.Close() fs.Dispose() cmd.Connection = conn cmd.CommandText = "Insert into gambar (NAMA,FOTO) values (@nama,@File)" cmd.Parameters.AddWithValue("@nama", namanya) cmd.Parameters.AddWithValue("@File", rawData) cmd.ExecuteNonQuery() Catch ex As Exception MessageBox.Show("error: " & ex.Message, "Error", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub LoadGambar(ByVal namanya As String) Dim SQL As String Try Dim arrImage() As Byte SQL = "SELECT FOTO FROM gambar where NAMA = '" + namanya + "' " sql_command = New MySqlClient.MySqlCommand(SQL, sql_connection) sql_reader = sql_command.ExecuteReader While sql_reader.Read() arrImage = sql_reader.Item("FOTO") Dim mstream As New MemoryStream(arrImage) 'untuk menampilkan gambar dari database..... PictureBox2.Image = Image.FromStream(mstream) mstream.Close() End While sql_reader.Close() Catch ex As Exception MessageBox.Show("error: " & ex.Message, "Error", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then TextBox1.Text = OpenFileDialog1.FileName TextBox2.Text = OpenFileDialog1.FileName 'untuk priview gambar yang akan disimpan kedalam database... PictureBox1.Image = Image.FromFile(TextBox1.Text) SaveGambar(TextBox1.Text) MessageBox.Show("Data saved", "Info", MessageBoxButtons.OK) End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click LoadGambar(TextBox1.Text) End Sub
Setelah Saya Coba untuk simpan file gmbar kedalam database sudah berhasil.
namun saat saya Klik Tombol “Show” Untuk Menampilkan kembali dari DBase ke picturebox,, BELUM BISA, dan tidak terjadi perubahan apa2 pada picutrebox, serta pesan error juga TIDAK muncul,,
setelah saya cek di database, hasil dari penyimpanan gambar ke dalam tabel seperti ini (Saya Menggunakan Program Navicat for Mysql untuk menampilkan seperti gambar beikut) :
Nah, Yang ingin Saya Tanyakan Adalah :
1. Apakah Dari Kondisi tabel di mysql seperti gambar diatas, menandakan bahwa file gambar sudah tersimpan kedalam database atau belum.??
2. Untuk Proses Menampilkan gammbar kedalam picturebox, itu dimana salah nya ya..?????
3. atau ada cara lain yg memang khusus diterapkan di vb.net 2010..???
saya Menggunakan vb.net 2010, Mysql Conector Net 6.5.4 & DataBase Mysql dari Xampp. saya harap master2 skalian mau memberi pencerahan atas masalah yang saya jelaskan .. terima kasih…
-
Berikut saya contohkan untuk membaca dua record berdasarkan kode Anda di atas
Private Sub LoadGambar(ByVal nama1 As String, ByVal nama2 As String) Dim cmd As New MySqlCommand Dim ms As New MemoryStream Dim dr As MySqlDataReader Dim arrImage1() As Byte Dim arrImage2() As Byte cmd.Connection = conn cmd.CommandText = "Select Foto from gambar where NAMA=@nama1 Or NAMA=@nama2" cmd.Parameters.AddWithValue("@nama1", nama1) cmd.Parameters.AddWithValue("@nama2", nama2) dr = cmd.ExecuteReader ' Apakah ada record yang bisa dibaca? If dr.Read() Then arrImage1 = dr("Foto") End If ' Apakah ada record berikutnya yang bisa dibaca? If dr.Read() Then arrImage2 = dr("Foto") End If dr.Close() End Sub
Untuk membaca banyak records bisa menggunakan perulangan
While dr.Read() ' Baca data per record di sini End While
-
terima kasih Ahmad Masykur atas reply nya…
apakah yang anda mksud coding nya dirubah jadi seperti ini :
While sql_reader.Read() If sql_reader.Read = True Then arrImage = sql_reader.Item("FOTO") Dim mstream As New MemoryStream(arrImage) PictureBox2.Image = Image.FromStream(mstream) mstream.Close() Else MessageBox.Show("Data Tidak Terbaca", "info", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If End While
dan juga saya coba codenya seperti ini :
If sql_reader.HasRows Then If sql_reader.Read Then arrImage = sql_reader.Item("FOTO") mstream = New MemoryStream(arrImage) PictureBox2.Image = Image.FromStream(mstream) mstream.Close() MessageBox.Show("Data Tidak Terbaca", "info", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If End If sql_reader.Close()
saya sudh mencoba seperti code diatas, tapi hasilnya sma saja, fotonya tidak tampil…
apakah ada yg salah dalam peng-codingan saya, atau ada cara lainnya.?
terima kasih..
-
Bukan begitu. Maksud saya apakah ada record yang dibaca? Coba contoh berikut
If sql_reader.Read() arrImage = sql_reader("FOTO") Dim mstream As New MemoryStream(arrImage) PictureBox2.Image = Image.FromStream(mstream) mstream.Close() Else MessageBox.Show("Data Tidak Terbaca", "info", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If
-
terima kasih telah membantu,, Dan akhirnya saya bisa menampilkan gambarnya dari mysql ke picturebox, Setelah saya rubah Query Sql nya dari :
SELECT FOTO from gambar where Nama ='" & namanya & "'"
menjadi seperti ini :
SELECT FOTO from gambar where ID ='" & Idnya & "'"
maka imagenya muncul di picturebox.
yang ingin saya Tanyakan Kembali :
1. kenapa kalau di SELECT berdasarkan nama dari foto tersebut tidak bisa,.??
2. Dan juga kalau di SELECT FOTO from gambar Where ID=’1′ and ID=’2′,, juga tidak muncul
datanya. ?
saya coba query No.1 Dan 2, LANGSUNG di Mysql nya, hasil record yg terbaca = NULL…
kenapa bisa demikian.?
terima kasih..
-
Kalo query-nya pake parameter seperti command insert-nya bisa?
SELECT FOTO from gambar where Nama = @nama
Kemungkinan isi variabel yang dimasukkan memang tidak sama dengan isi field.
-
saya sudah coba dan ternyata bisa tampil fotonya….
kemudian saya coba untuk menampilkan 2 foto sekaligus dari database, dengan menambahkan querynya seperti ini :
SELECT FOTO from gambar where Nama=@nama1 And Nama=@nama2
untuk code nya seperti ini :
kode simpan = Masih sama dengan yang diatas (Private Sub SaveGambar).
code pada button BrowseAndSave :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click With OpenFileDialog1 .InitialDirectory = "E:\foto" End With If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then If TextBox1.Text = "" Then TextBox1.Text = OpenFileDialog1.FileName PictureBox1.Image = Image.FromFile(TextBox1.Text) SaveGambar(TextBox1.Text) Else TextBox4.Text = OpenFileDialog1.FileName PictureBox1.Image = Image.FromFile(TextBox4.Text) SaveGambar(TextBox4.Text) End If MessageBox.Show("Data Sudah Disimpan", "Info", MessageBoxButtons.OK) End If End Sub
untuk Load Gambarnya :
Private Sub LoadGambar(ByVal nama1 As String, ByVal nama2 As String) Dim cmd As New MySqlCommand Dim ms As New MemoryStream Dim dr As MySqlDataReader Dim arrImage1() As Byte Dim arrImage2() As Byte cmd.Connection = conn cmd.CommandText = "Select Foto from gambar where NAMA=@nama1 Or NAMA=@nama2" cmd.Parameters.AddWithValue("@nama1", nama1) cmd.Parameters.AddWithValue("@nama2", nama2) dr = cmd.ExecuteReader If dr.HasRows Then If dr.Read() Then 'tampilan foto 1 arrImage1 = dr.Item("FOTO") Dim mstream1 As New MemoryStream(arrImage1) With PictureBox2 .Image = Image.FromStream(mstream1) .SizeMode = PictureBoxSizeMode.StretchImage End With mstream1.Close() 'tampilan foto 2 arrImage2 = dr.Item("FOTO") Dim mstream2 As New MemoryStream(arrImage2) With PictureBox2 .Image = Image.FromStream(mstream2) .SizeMode = PictureBoxSizeMode.StretchImage End With mstream2.Close() End If End If dr.Close() End Sub
di button Shownya, Saya Panggil code nya seperti ini :
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'Textboxt1 = Namafoto1 ; Textboxt4 = = Namafoto2 loadgbr(TextBox1.Text, TextBox4.Text) End Sub
namun yang tampil hanya Foto Yang Ke 1. seperti ini :
Padahal saya sudah coba querynya di mysql nya. dan hasilnya 2 record :
itu dimana ya salahnya..??
kalau dilihat dari kode untuk Loadgambarnya, gk ada errornya..
terima kasih..
-
Itu gambar tidak berasal dari database tetapi dari kode saat menyimpan.
Query Anda di aplikasi tidak menghasilkan records satu pun (0 records). Query yang anda tulis antara aplikasi dengan di MySQL berbeda. Silakan periksa kembali query Anda.
-
jadi kalau mau ambil record pertama dan kedua dari tabel bagaimana caranya ya.?
kode yang ini :
dr.Item("FOTO")ingin saya rubah menjadi :
dr.rows(0).Item("FOTO") 'untuk mengambil record pertamadr.rows(1).Item("FOTO") 'untuk mengambil record kedua
tapi tidak bisa,, dan muncul error…
mohon diberi solusinya ya…
terima kasih..
-
Berikut saya contohkan untuk membaca dua record berdasarkan kode Anda di atas
Private Sub LoadGambar(ByVal nama1 As String, ByVal nama2 As String) Dim cmd As New MySqlCommand Dim ms As New MemoryStream Dim dr As MySqlDataReader Dim arrImage1() As Byte Dim arrImage2() As Byte cmd.Connection = conn cmd.CommandText = "Select Foto from gambar where NAMA=@nama1 Or NAMA=@nama2" cmd.Parameters.AddWithValue("@nama1", nama1) cmd.Parameters.AddWithValue("@nama2", nama2) dr = cmd.ExecuteReader ' Apakah ada record yang bisa dibaca? If dr.Read() Then arrImage1 = dr("Foto") End If ' Apakah ada record berikutnya yang bisa dibaca? If dr.Read() Then arrImage2 = dr("Foto") End If dr.Close() End Sub
Untuk membaca banyak records bisa menggunakan perulangan
While dr.Read() ' Baca data per record di sini End While
-
terima kasih ahmad masykur karena sudah mau berusaha membantu saya…
akan saya coba dulu code nya..nnti kl ada masalah, akan saya tanyakan kembali…