تقييم الموضوع :
  • 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 

   





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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] هل من الضروري اغلاق الاتصال بعد جلب البيانات من sql في جملة الاستعلام alipro 3 67 , 03:50 AM
آخر رد: Jounior_P
  خطأ في الحفظ بدون صورة sofiane-phy 7 134 24-10-20, 08:28 AM
آخر رد: سعود
  [ تمّ الحل ] : عدم القدرة على عمل أتاش لقاعدة البيانات عبد العزيز البسكري 23 821 24-10-20, 12:48 AM
آخر رد: عبد العزيز البسكري
  [VB.NET] ربط التقارير بقاعده البيانات احمد سليمان 0 65 14-10-20, 02:43 PM
آخر رد: احمد سليمان
  ربط ReportViewer بقاعدة بيانات access عليها password khaled Mohammed 0 64 13-10-20, 02:07 PM
آخر رد: khaled Mohammed
  حفظ list box في قاعدة البيانات اعينوني,,,,,,, KIKO1992 0 72 13-10-20, 11:08 AM
آخر رد: KIKO1992
  [VB.NET] اضافة ازرار حسب عدد متغير في قاعدة البيانات Ad Heart 2 435 08-10-20, 05:07 AM
آخر رد: Ad Heart
  [VB.NET] عمل اتاش و تحديث قاعدة البيانات بعد التعديل على الحقول دون ضياع السجلات برمجيا larbihamri 4 214 06-10-20, 03:33 PM
آخر رد: larbihamri
  [VB.NET] طباعة صورة من الإكسيس بأستخدام الفيجول بيسك 2010 رامى محمد 3 214 20-09-20, 03:12 PM
آخر رد: رامى محمد
  [VB.NET] تعديل البيانات من خلال فورم آخر EbrNaj00 6 359 16-09-20, 12:42 AM
آخر رد: EbrNaj00

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


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