[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 SubUntuk 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 Whiledan 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 Subuntuk 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 Subdi 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 Subnamun 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 keduatapi 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 SubUntuk 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…