تعلم حفظ و أسترجاع الصور فى قاعدة بيانات أكسس فى بنية VB.NET

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعلم حفظ و أسترجاع الصور فى قاعدة بيانات أكسس فى بنية VB.NET

مُساهمة من طرف أحمد مناع في الخميس أغسطس 29, 2013 8:55 pm

بسم الله الرحمن الرحيم

أخوانى الكرام أهلا وسهلا بكم ......منذ ما يقرب من 6 شهور كنت قد كتبت مقال عن كيفية حفظ و استرجاع الصور فى قاعدة بيانات أكسس و ذلك من خلال الفجوال بيسك 6 وذلك بناء على طلب الاخ الحبيب / طالب العلم .....أما اليوم فقد هل علينا الاخ الكريم sadek al badany يسأل عن كيفية فعل ذلك من خلال VB.NET ......ولذلك فإن هذا الدرس البيسط سنحاول فية شرح كيفية تخزين الصور فى قواعد بيانات أكسس .....و أتمنى من جميع الاخوة أن لن يبخلوا علينا فى السؤال ....فكلما سألتم كلما تعلمنا أكثر و أكثر

_ بداية قم بإنشاء قاعدة بيانات و ليكن images.mdb مثلا و بها جدول و ليكن Pictures مثلا ...ثم انشىء الحقول التى ترغب فيها مع مراعاة أن يكون الحقل الذى سوف يتم حفظ الصورة فية من نوع OLE Object

_ نقوم بإنشاء مشروع  نوافذ جديد فى الفجوال بيسك دوت نت

_نقوم بإضافة عدد 3 زر أمر Button على النافذة وعدد مربع صورة PictureBox و مربع حوارى فتح OpenFileDialog مع مراعات أن يكون الاسم البرمجى لتك العناصر على النحو التالى :

Button 1 : Name : LoadImage
Button 2 : Name : SaveToDB
Button 3 : Name : ReadfFromDB
OpenFileDialog: Name : dlgPics
PictureBox: Name : pic

_ من أجل الاتصال بقاعدة البيانات وأيضا إدراج الصور من الذاكرة سوف تحتاج أستيراد مساحة الاسماء التالية :
الرمز:
Imports System.Data.OleDb          
Imports System.IO
_ نقوم بالاعلان عن متغير نصى لتحزين نص الاتصال بقاعدة بيانات أكسس ....على النحو التالى :

الرمز:
 Private Const conString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\images.mdb;"
_ فى حدث النقر لزر الامر LoadImage  وهو الخاص لفتح مربع الحوارى "فتح" لاختيار صورة من الجهاز .....نكتب التعليمات التالية :
الرمز:
Private Sub LoadImage1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoadImage1.Click
        pic.Image = Nothing
        dlgPics.ShowDialog()
        Dim fName As String = dlgPics.FileName
        If fName.Length = 0 Then Exit Sub
        Try
            pic.Image = Image.FromFile(fName)
        Catch ex As Exception
            MessageBox.Show("Something's not right here." & ControlChars.CrLf & ex.ToString())
        End Try
    End Sub
شرح الكود :
1_ فى السطر الاول ...قمنا بمسح مربع الصورة لتهيئتها لاستقبال صورة جديدة
2_فى السطر الثانى و الثالث إظهار المربع الحوارى "فتح " لاختيار صورة مع تخزين مسار الصورة فى المتغير fName
3_فى السطر الثالث فمنا بعمل جملة شرطية للتأكد من أنه قد قام المستخدم أختيار صورة وإن لم يكن كذلك يتم الخروج من الاجراء
4_اظهار الصورة المخزن مسارها فى المتغير fName فى مربع الصورة pic.
5_ أستخدمنا التعليمة Catch لاظهار أى خطأ يظهر

_ فى حدث النقر على زر الامر SaveToDB و هو الخاص بحفظ الصورة فى قاعدة البيانات ...نكتب التعليمات التالية :

الرمز:
 Private Sub SaveToDB1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveToDB1.Click
        Dim str As New MemoryStream
        pic.Image.Save(str, Imaging.ImageFormat.Jpeg)
        Dim buffer(CInt(str.Length - 1)) As Byte
        str.Position = 0
        str.Read(buffer, 0, CInt(str.Length))
        Dim con As New OleDbConnection(conString)
        Dim cmd As New OleDbCommand("INSERT INTO Pictures (ThePicture) VALUES (@ThePicture)", con)
        cmd.CommandType = CommandType.Text

        Dim prmPic As New OleDbParameter
        With prmPic
            .ParameterName = "@MyPicture"
            .OleDbType = OleDbType.Binary
            .Value = buffer
        End With
        cmd.Parameters.Add(prmPic)

        Try

            con.Open()
            cmd.ExecuteNonQuery()
            MessageBox.Show("The image was saved successfully.")
            pic.Image = Nothing
        Catch ex As Exception
            MessageBox.Show("There was a problem saving the image." & ControlChars.CrLf & ex.Message)
        Finally
            If con.State = ConnectionState.Open Then con.Close()
            con.Dispose() : cmd.Dispose()
            con = Nothing : cmd = Nothing : prmPic = Nothing
        End Try
    End Sub
شرح الكود :

1_قمنا بالاعلان عن الكائن str كمثيل جديد للكائن MemoryStream و الذى من خلاله سنقوم بحفظ الصور فى قاعدة البيانات
2_ قمنا بحفظ الصورة فى الكائن str بتنسيق jpeg
3_ يتم حفظ الصور فى قاعدة البيانات بأستخدام التمثيل الثنائى binary format لذلك قمنا بإنشاء المخزن المؤقت ثنائي لاستقبال صورة
4_ قمنا بجعل وضع الكائن str يساوى صفر وذلك حتى لا تحدث اخطاء عند قراءة الصورة
5_فى السطر الخامس قمنا بقراءة محتويات دفق الذاكرة في المخزن المؤقت
6_ قمنا بإنشاء اتصال بقاعدة بيانات أكسس و ذلك أستعداد لتخزين الصورة
7_قمنا بعمل جملة استعلام لادراج الصورة فى حقل ThePicture

_ فى حدث النقر على زر الامر ReadfFromDB وهو الخاص بأستراج الصورة من قاعدة البيانات ....نكتب التعليمات التالية :
الرمز:
   'get the id of the image to view
        Dim frm As New Form2
        frm.ShowDialog()
        Dim imgID As Integer = frm.ImageID
        frm = Nothing

        'if nothing was entered then bail out
        If imgID = 0 Then Exit Sub

        'define the query
        Dim sql As String = "SELECT ThePicture FROM Pictures WHERE picID = @picID"
        'create a connection to the database
        Dim con As New OleDbConnection(conString)
        'create the command
        Dim cmd As New OleDbCommand(sql, con)
        cmd.CommandType = CommandType.Text

        'create the parameter
        Dim prmID As New OleDbParameter
        With prmID
            .ParameterName = "@picID"
            .Value = imgID
        End With
        cmd.Parameters.Add(prmID)       'add this to the command

        'we need a dataadapter and a dataset to grab the image
        Dim da As New OleDbDataAdapter(cmd)
        Dim ds As New DataSet("Picture")

        Try
            con.Open()      'open the connection
            da.Fill(ds)     'fill the dataset

            'bail out if we don't have a picture
            If ds.Tables(0).Rows.Count = 0 Then
                MessageBox.Show("There is no image with that ID in the database")
                Exit Sub
            End If

            'if we got here we are good to go. Create the buffer and fill it    
            Dim buffer() As Byte = CType(ds.Tables(0).Rows(0)("ThePicture"), Byte())
            'create memory stream from this array of bytes
            Dim str As New MemoryStream(buffer)

            'set the image property of the picture box to the image in the stream
            pic.Image = Image.FromStream(str)
        Catch ex As Exception
            MessageBox.Show("There was a problem reading the database." & ControlChars.CrLf & ex.Message)
            pic.Image = Nothing
        Finally
            If con.State = ConnectionState.Open Then con.Close()
            con.Dispose() : con = Nothing
            cmd.Dispose() : cmd = Nothing
            da.Dispose() : da = Nothing
            ds.Dispose() : da = Nothing
        End Try
أما الشرح ستجدة فى تعليقات الكود فى المرفقات


ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم حفظ و أسترجاع الصور فى قاعدة بيانات أكسس فى بنية VB.NET

مُساهمة من طرف sadek al badany في الخميس أغسطس 29, 2013 11:44 pm

شكرا اخي احمد على هذى المثال بس تكملة المثال مثل زر التالي اظهار الصورة التالية وزر السابق اظهار االصورة السابقة من قاعدة البيانات وجزاك الله خير

sadek al badany
.
.

تاريخ التسجيل : 29/08/2013
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة : اليمن
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم حفظ و أسترجاع الصور فى قاعدة بيانات أكسس فى بنية VB.NET

مُساهمة من طرف fal-ahmed في السبت نوفمبر 02, 2013 2:12 am

لما جيت احفظ طلعت الرساله انو مش قادر يحفظ ويحتاج الي updataeble

fal-ahmed
.
.

تاريخ التسجيل : 02/11/2013
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة : فلسطين
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم حفظ و أسترجاع الصور فى قاعدة بيانات أكسس فى بنية VB.NET

مُساهمة من طرف مبرمج جديد في الأحد أبريل 06, 2014 6:58 pm

شكراً على المثال
لكن يعطينى خطأ فى كود استدعاء الصورة من قاعدة البيانات أنه لا يوجد form2
وعند اضافة form []d]
ظهر لى خطأ أن imagid  ليس عضو فى form2

مبرمج جديد
.
.

تاريخ التسجيل : 06/04/2014
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم حفظ و أسترجاع الصور فى قاعدة بيانات أكسس فى بنية VB.NET

مُساهمة من طرف أحمد مناع في الأحد أبريل 06, 2014 7:12 pm

مبرمج جديد كتب:شكراً على المثال
لكن يعطينى خطأ فى كود استدعاء الصورة من قاعدة البيانات أنه لا يوجد form2
وعند اضافة form []d]
ظهر لى خطأ أن imagid  ليس عضو فى form2

اهلا و سهلا اخى الكريم

قم برفع مثالك للتعديل علية و اكتشاف سبب الخطأ المشار الية

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى