تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] حفظ صورة بقاعدة البيانات
#1
السلام عليكم

عندي صور اريد حفظها بقاعدة البيانات وحذفها مشاهدتها ليس بامتدها ولكن بتحويلها لبينري يحفظ بقاعدة البيانات

كود الحفظ الخطاء المستخدم


PHP كود :
       Try

            If PictureBox1
.Image IsNot Nothing Then

                If MsgBox
("  هل تريد استبدال الصورة الحالية  " " ؟ "MsgBoxStyle.Exclamation MsgBoxStyle.MsgBoxRight MsgBoxStyle.OkCancel"استبدال صورة") = MsgBoxResult.Cancel Then Exit Sub
            Else

                If MsgBox
("  استمرار اضافة صورة جديدة للسجل رقم  " Label2.Text " ؟ "MsgBoxStyle.Exclamation MsgBoxStyle.MsgBoxRight MsgBoxStyle.OkCancel"ادراج صورة") = MsgBoxResult.Cancel Then Exit Sub

            End 
If


 
           Application.DoEvents()



 
           Dim OFG As New OpenFileDialog

            OFG
.Filter "Files(*.jpg)|*.jpg|Files(*.gif)|*.gif|Files(*.bmp)|*.bmp|Files(*.png)|*.png"
 
           OFG.Title "ادراج صورة"
 
           OFG.FileName ""


 
           If OFG.ShowDialog() = Windows.Forms.DialogResult.OK Then

                
'ادراج الصورة بهذه الطريقة لكي تتحرر الصورة الاصلية من الذكراة لكي تستطيع مثلا حذفها 
                Dim fs As IO.FileStream = New IO.FileStream(OFG.FileName, IO.FileMode.Open, IO.FileAccess.Read)
                Dim LoadImage As Image = Image.FromStream(fs)
                fs.Close()



                Dim Stream As New IO.MemoryStream()

                Dim NewBitmap As New Bitmap(LoadImage, 200, 225)

                '
تخزين الصورة في الميموري بعد التعديل على ابعادها ونوع امتدادها لكي لا تاخذ حيز كبير في القاعدة

                NewBitmap
.Save(StreamSystem.Drawing.Imaging.ImageFormat.Jpeg)


 
               Application.DoEvents()


 
               'كود حفظ الصورة كتعديل

                ' 
هو رقم السجل الذي تقف عليه حاليا BindingSource1.Position هذا الكود


                
'كود حفظ الاضافة وحفظ التعديل

                BindingSource1.EndEdit()
                DataAdapter1.Update(DataSet1.Tables("tb1,tb2"))


                DataSet1.Tables("tb1").Rows(BindingSource1.Position).Item("image_mail") = Stream.ToArray






                '
اغلاق المتغير بعد الانتهاء من ادراج الصورة في السجل
                Stream
.Close()
 
               'كود حفظ الاضافة وحفظ التعديل
                BindingSource1.EndEdit()
                DataAdapter1.Update(DataSet1.Tables("tb1,tb2"))

                Application.DoEvents()

                MsgBox("تم حفظ الصورة نجاح", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Information, "نجاح ")

            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try


    End Sub 


كود الحذف


PHP كود :
Try


 
           If PictureBox1.Image Is Nothing Then Beep() : Exit Sub

            If MsgBox
("  استمرار حذف الصورة الحالية" " ؟ "MsgBoxStyle.Exclamation MsgBoxStyle.MsgBoxRight MsgBoxStyle.OkCancel"حذف صورة") = MsgBoxResult.Cancel Then Exit Sub


            
'افراغ الصورة من البكشر بكس
            PictureBox1.Image = Nothing


            '
كود حفظ الاضافة وحفظ التعديل
            BindingSource1
.EndEdit()
 
           DataAdapter1.Update(DataSet1.Tables("Tb1,tb2"))


 
           MsgBox("تم حذف الصورة نجاح"MsgBoxStyle.MsgBoxRight MsgBoxStyle.Information"نجاح ")


 
       Catch ex As Exception

            MessageBox
.Show(ex.Message"Error"MessageBoxButtons.OKMessageBoxIcon.Error)

 
       End Try 

ولكن لايعمل البرنامج كامل بالمرفقات
الرد }}}
تم الشكر بواسطة:
#2
أخي الكريم
BindingSource1.Position 
لا يشير إلى السجل الموجود في الجدول tb1 كما يبدو لك
الـ Position يشير إلى موقع الموشر في BindingSource1
وهو يبداء من الرقم صفر

على سبيل المثال عند فرز العناصر الموجودة في الـ BindingSource1 من خلال ترتيب أحد الأعمدة من الأصغر إلى الأكبر أو العكس
الـ Position لن يتغير بينما السجل الذي يتم التأشير علية قد اختلف

جرب ونفذ الكود التالي في Sub مختلف
هذا الكود فقط للتجرة وليس الحل
لإثبات أن الـ Position يختلف عن Current فقط لا غير
لا تنسى تغير الـXXXXXXX الموجودة إلى اسم احد الحقول في الجدول ويكون نص فقط للتجربة لإظهار القيمة في رسالة من Row1 و Row2
PHP كود :
       Dim drv As DataRowView BindingSource1.Current
        Dim Row1 
As DataRow drv.Row
        Dim Row2 
As DataRow DataSet1.Tables("tb1").Rows(BindingSource1.Position)
 
       MsgBox("Row 1 = " Row1("xxxxxxx") & ",      Row 2 = " Row2("xxxxxxxx")) 
لاحظ Row1 هو السجل الفعلي الذي يقوم الـ BindingSource1 بالتأشير علية

لاحظ Row2 سيجلب سجل مختلف عن الذي يؤشر علية الـ BindingSource1

لأن الـ Position يختلف عن Current






الحل المقترح :

لتبسيط الأمور استخدم طريقة تسمى إكتنشن Extension
ضع الكود التالي في نهاية الفور آخر سطر وخارج الكود الخاص بالفور :
PHP كود :
Public Module module1
    
<System.Runtime.CompilerServices.Extension>
 
   Public Function ToByteArray(img As Image) As Byte()
 
       Using strm As New IO.MemoryStream
            img
.Save(strmimg.RawFormat)
 
           Return strm.GetBuffer()
 
       End Using
    End 
Function
End Module 

هذة الإضافة خارج موضوعنا لكن أنا احب اشتغل بهالطريقة ويمكن تحب تعرفها فقط لا غير
لاحظ هذة فنكشن Function أسمها ToByteArray
من اسمها واضح تعني إلى مصفوفة
أي التحويل إلى مصفوفة بايتات
ستستخدمها في الكود التالي
وهذة الطريقة تسمح لك بإضافة أي اوامر أو وظائف إضافية لأي نوع من أنواع الـ Net.
على سبيل المثال الكلاس System.Drawing.Image
لا يحتوي على وظيفة لتحويل الصورة Image إلى ()ByteArray
الـإكتنشن Extension تسمح لك بإضافة هذة الوظيفة إلى الكلاس System.Drawing.Image



استخدم الكود التالي بدلاً من الكود الذي تستخدمة :
الملاحظات التي تبداء بالرقم 999 لتوظيح التغيير الذي قمت به
PHP كود :
       Try
            If PictureBox1
.Image IsNot Nothing Then
                If MsgBox
("  هل تريد استبدال الصورة الحالية  " " ؟ "MsgBoxStyle.Exclamation MsgBoxStyle.MsgBoxRight MsgBoxStyle.OkCancel"استبدال صورة") = MsgBoxResult.Cancel Then Exit Sub
            Else
                If MsgBox
("  استمرار اضافة صورة جديدة للسجل رقم  " Label2.Text " ؟ "MsgBoxStyle.Exclamation MsgBoxStyle.MsgBoxRight MsgBoxStyle.OkCancel"ادراج صورة") = MsgBoxResult.Cancel Then Exit Sub
            End 
If
 
           Dim OFG As New OpenFileDialog
            OFG
.Filter "Files(*.jpg)|*.jpg|Files(*.gif)|*.gif|Files(*.bmp)|*.bmp|Files(*.png)|*.png"
 
           OFG.Title "ادراج صورة"
 
           OFG.FileName ""
 
           If OFG.ShowDialog() = Windows.Forms.DialogResult.OK Then
                
'999 بالتأشير علية BindingSource1 لجب السجل الذي يقوم Current استخدم 
                Dim drv As DataRowView = BindingSource1.Current
                '
999 DataRow إلى DataRowView والذي هو من نوع BindingSource1 حول نوع مؤشر 
                Dim Row 
As DataRow drv.Row
                
'999 إقراء البايتات مباشرتاً من الملف 
                Dim NewImage As Image = Image.FromStream(New IO.MemoryStream(IO.File.ReadAllBytes(OFG.FileName)))
                Dim NewBitmap As New Bitmap(NewImage, 200, 225)
                '
999  Row ضع البايتات مباشرتاً في الـ 
                
'999 هي في الأصل غير موجودة لكن بعد عمل إكتنشن يمكن إستخدامها كالتالي ToByteArray لاحظ الوظيفة 
                Row("image_mail") = NewBitmap.ToByteArray
                BindingSource1.EndEdit()
                DataAdapter1.Update(Row)
                MsgBox("تم حفظ الصورة نجاح", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Information, "نجاح ")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try 

   





تحياتي
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  تعديل كود ارسال صورة الى الواتس new_programer 2 114 21-03-24, 10:07 PM
آخر رد: new_programer
  [سؤال] أتمنى اجابة وافية:عمل برنامج بقاعدة بيانات SQL دون حاجة تثبيت SQLSERVER dr.programming 6 598 19-03-24, 08:56 AM
آخر رد: سلامه محمد11
  [VB.NET] حل مشكلة الاتصال بقواعد البيانات access loay775 2 158 25-02-24, 06:29 AM
آخر رد: loay775
  سؤال عن عملية حذف سجل من قاعدة البيانات assuhimi 3 249 11-02-24, 08:43 PM
آخر رد: assuhimi
  [VB.NET] منع تكرار البيانات في عند الادخال مبرمج صغير 1 2 255 24-01-24, 05:18 PM
آخر رد: مبرمج صغير 1
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 272 18-01-24, 05:04 PM
آخر رد: loay775
  [VB.NET] إعادة استدعاء البيانات من قاعدة بيانات اكسس والاهم الصورة مبرمج صغير 1 1 273 13-01-24, 01:17 PM
آخر رد: مبرمج صغير 1
  [كود] اريد كود إرسال البيانات من الفيجوال بيسك إلىPDF issamsaidd 10 5,829 25-12-23, 06:30 PM
آخر رد: الحزين اليماني
  جملة الاتصال بقاعدة البيانات اكسس محمد خيري 4 362 12-12-23, 03:14 AM
آخر رد: محمد خيري
  كود الاتصال بقاعدة البيانات sqlserver strongriseman 2 421 29-11-23, 09:25 PM
آخر رد: العتيق

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم