السلام عليكم
عملية اضافة الصور من البرنامج الى الداتا بيس DataBase تعتبر اصعب من ادخال البيانات النصية بالنسبة للمبتدئين لاننا نقوم اولاً بأختيار الصورة عن طريق مربع حواري (open dialog box) وبعد ذلك نحتاج الى فلترة الملفات التي سنقوم بفتحها , بعد ذلك يجب ان نقوم بتحويل الصورة المختارة الى bit وخزنها بالداتا بيس وثم استدعاها, وهكذا
توجد العديد من الطرق ولكني افضل هذا الطريقة (ramilove) لانها الافضل .
نبدأ بالشرح - بعد الاتصال بالداتا بيس (هذا الشيء شرحناه سابقا)
1- اضف ثلاث ازرار امر buttons اسماءهن (ادراج صورة او استبدال اذا كانت موجودة مسبقاً - حذف صورة - تصدير )
2- اضف picture box واحد
3- المربع الحواري رح ننشئ برمجياً
4- ليبل وعليه يحتوي على id مسحوب من الداتا بيس ( )
انتبه انا مخلي اسم الجدول TableName واسم العمود pic انت غيره حسب اسم جدولك
الكود الاول في زر امر الادراج
كود PHP:
If DataSet1.Tables("TableName").Rows.Count = 0 Then
MsgBox("الجدول فارغ من السجلات", 16 + 524288, "تنبيه")
Exit Sub
End If
Try
If PictureBox1.Image IsNot Nothing Then
If MsgBox(" هل تريد استبدال صورة الحالية رقم " & Label1.Text & " ؟ ", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.OkCancel, "استبدال صورة") = MsgBoxResult.Cancel Then Exit Sub
End If
Application.DoEvents()
Dim f As New OpenFileDialog
f.Filter = "Files(*.jpg)|*.jpg|Files(*.gif)|*.gif|Files(*.bmp)|*.bmp|Files(*.png)|*.png"
f.Title = "ادراج صورة"
f.FileName = ""
If f.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim imgByteArray() As Byte
Dim Stream As New MemoryStream()
Dim uploadedImage As New Bitmap(f.FileName)
Dim newSize As New Size(200, 250)
Dim newBitmap As New Bitmap(uploadedImage, newSize)
newBitmap.Save(Stream, System.Drawing.Imaging.ImageFormat.Jpeg)
imgByteArray = Stream.ToArray()
Application.DoEvents()
'كود حفظ الصورة
'كود معرفة رقم الصف الحالي في قاعدة البيانات
Dim Row_Num As Integer = Me.BindingContext(DataSet1, "TableName").Position
DataSet1.Tables("TableName").Rows(Row_Num).BeginEdit()
DataSet1.Tables("TableName").Rows(Row_Num).Item("pic") = imgByteArray
DataSet1.Tables("TableName").Rows(Row_Num).EndEdit()
Stream.Close()
'كود حفظ
Validate()
DataAdapter.Update(DataSet1.Tables("TableName"))
DataSet1.AcceptChanges()
f.Dispose()
LoadPhoto()
MsgBox("تم حفظ الصورة نجاح", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Information, "نجاح ")
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
كود حذف الصورة
كود PHP:
Try
If PictureBox1.Image Is Nothing Then
MsgBox("الصورة غير موجودة ", 16 + 524288, "تنبيه")
Exit Sub
Else
If MsgBox(" هل تريد حذف صورة الحالية رقم " & Label1.Text & " ؟ ", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.OkCancel, "حذف صورة") = MsgBoxResult.Cancel Then Exit Sub
End If
Application.DoEvents()
'كود معرفة رقم الصف الحالي في قاعدة البيانات
Dim Row_Num As Integer = Me.BindingContext(DataSet1, "TableName").Position
'كود حفظ التعديل
DataSet1.Tables("TableName").Rows(Row_Num).BeginEdit()
'كود حفظ قيمة فارغة
DataSet1.Tables("TableName").Rows(Row_Num).Item("pic") = DBNull.Value
DataSet1.Tables("TableName").Rows(Row_Num).EndEdit()
'كود حفظ التعديل
Validate()
DataAdapter.Update(DataSet1.Tables("TableName"))
DataSet1.AcceptChanges()
PictureBox1.Image = Nothing
MsgBox(" تم بنجاح حذف الصورة الحالية رقم " & Label1.Text, 64 + 524288, "نجاح")
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
كود تصدير الصورة
كود PHP:
Try
' تصدير الصورة
If PictureBox1.Image Is Nothing Then
MsgBox("الصورة غير موجودة ", 16 + 524288, "تنبيه")
Exit Sub
End If
Application.DoEvents()
Dim s As New SaveFileDialog
s.Filter = "Files(*.jpg)|*.jpg"
s.Title = "تصدير صورة"
s.FileName = ""
If s.ShowDialog = Windows.Forms.DialogResult.OK Then
'تصير الصورة من بكجر بوكس
Dim bm As New Bitmap(PictureBox1.Image)
bm.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
MsgBox("تم تصدير الصورة بنجاح", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Information, "تصدير")
s.Dispose()
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
هذا الحدث بداخل الليبل بداخل حدث (Text Change) بدون هذا الكود رح تتنقل بين السجلات وتبقى الصورة على اول سجل
كود PHP:
On Error Resume Next
PictureBox1.Image = Nothing
LoadPhoto()
هذه الدالة function وظيفتها تسحب الصورة من الداتا بيس
كود PHP:
Public Sub LoadPhoto()
On Error Resume Next
Dim imgByteArray() As Byte
Dim Row_Num As Integer = Me.BindingContext(DataSet1, "TableName").Position
imgByteArray = DataSet1.Tables("TableName").Rows(Row_Num).Item("pic")
If (imgByteArray.Length > 0) Then
Dim Stream As New MemoryStream(imgByteArray, True)
Dim Img As System.Drawing.Image = New Bitmap(Stream)
PictureBox1.Image = Img
Stream.Close()
End If
End Sub
اتمنى لكم التوفيق