الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

صوره في قاعده بيانات

مغلق
بدأه HASHAD_MAHMOUD في 7 نوفمبر 2005 · 20 رد · 6,060 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

انا عندي سؤال يمكن يكون مكرر وقد بحثت فعلا عنه هنا في المنتدي ووجدت مواضيع تحدث عن نفس المشكله ولكن لايوجد فيها ماابحث عنه بالضبط ففكرت ان اضعه في موضع جديد

واسف لهذا التصرف :(

:rolleyes:

المهم الموضوع اني عندي قاعده بيانت بالاكسس وهي عن شئون الموظفين وفيها البيانات العاديه لكل موظف ولكن فيها ايضا صوره كل موظف وهنا تكمن المشكله حيث اني عجزت عن وضع صوره الموظف في الخانه الخاصه به

يعني مثلا المفروض في البرنامج يوجد ازرار للتحرك بين السجلات والمفروض انه عند التحرك يظهر في التكست اسماء الموظفين وايضا تظهر صوره كل موظف

عجزت الصراحه عن عمل ذلك

كما انه المفروض عند البحث عن اسم او رقم الموظف تظهر صورته بجانب باقي بياته

ارجو ان تفيدوني

واسف لتكرار الموضوع لاني لم اجد ما ابحث عنه بالظبط وشكراااااااااااااااااااااااا

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#2

في فيجوال 2005 وجدت انه يمكن عمل databinding للـ image من خلال شاشه الخصائص ودون كتابه سطر كود واحد وشغاله

ولكن انا اريد ان اعرف كيف اعملها في 2003 لانه يهمني جدا عمليه Navigat بين الحقول فتظهر الصور مع كل اسم وبيانات لصاحبها

ارجوا ان تفيدوني وشكراااا

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#3

السلام عليكم

فقط لدي بعض الاستفسارات من فضلك.

السؤال الاول : هل الصور في قاعدة البيانات أم في مجلد خارجي ؟

السؤال الثاني : هل يتم تحميل الصور في الـ DataSet أو فقط البيانات كلها ما عدى الصور؟

إنتظر الجواب ...

في المثال يتضح المقال

#4

بصراحة يا أخي من ضعفالبرنامج أنتقوم بتخزين الصورفي الداتل باس وإنمايجب عليك أن تخزن الصور في مجلد خاص وتقوم بتخزين مسار الصورة في الداتا باس بينما إذا خزنت الصورة في الداتا باس فسوف يكبر حجم الداتا باس وبالتالي سوف تبطا عمليات البحث

وشكراً

#5
naalna كتب:
بصراحة يا أخي من ضعفالبرنامج  أنتقوم بتخزين الصورفي الداتل باس وإنمايجب عليك أن تخزن  الصور  في مجلد خاص وتقوم  بتخزين مسار الصورة في الداتا باس  بينما إذا خزنت الصورة في  الداتا باس فسوف يكبر حجم الداتا  باس  وبالتالي  سوف تبطا  عمليات البحث

وشكراً

فعلا هذا افضل حل و قد فعلتها في الفيجوال بيسك 6 من قبل

ليس عملا جيدا ان تضع الصور في قاعدة البيانات و لكن ضع اسماء الصور و مسارها في قاعدة البيانات

#6

اخي غملاسي اشكرك لاهتمامك

اخوتي naalna و Wise اشكركم علي الردود

الصراحه انا كان في نيتي ان اضع الصور داخل قاعده البايانات

وداخل الداتا سيت ـ DataSet ايضا حتي يمكنني عمل عمليه Navigat

ولكني عندما سمعت منكم انه من الافضل ان اضعها في مجلد منفرد

تحيرت اكثر :o

فكيف تكون الطريقه الي ذلك وهل يمكن عمل عمليه Navigat وتتغير الصور مع تغير اسماء الموظفين

لان هذه النقطه الاساسيه B) عند البحث عن موظف تظهر صورته :unsure:

اذا كان ممكن دون التخزين في القاعده فارجوا ان تدلوني الي الطريقه

واشكركم جميعا

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#7

لو انت مش مستعجل يبقى ممكن ابعتلك مشروع قاموس بالصور

بس حاليا مقدرش عشان المشروع على سي دي و انا معنديش سي دي روم حاليا

بس تقريبا الفكرة

انك تضع كل صور الموظفين في فولدر

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

و بعد ذلك اكيد هتستخدم ادوات الصور لعرض الصور

و الله اعلم

#8

اشكرك يا اخ Wise

ولكني محتاج الموضوع ضروري فياريت احد الاخوه لو يعرف يدلني علي الطريقه

بارك الله فيكم

وشكرا

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#9

ممكن اخي تبحث في منتدي الفيجوال بيسك 6

او الاكسس

اذكر اني تعلمت هذا الموضوع من هذه الاقسام

سوف تتعرف على الفكرة و بعد ذلك تحول الكود الي الدوت نت

و ايضا اذهب الي منتدي منتدي اوفيسينا في قسم الاكسس

ان شاء الله تجد غايتك

تم تعديل هذه المشاركة بواسطة Wise في 8 نوفمبر 2005 في 07:11

#10

ولكن هل في منتدي اوفيسينا علاقه بالفيجوال

سابحث وربنا يسهل

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#11

hi

am sory for late to answer u

first i have the code and the answer for the tow ways for the imges

first imges in database

1.upload the imge (or open the imge in the imge control in the system)

    With OpenFileDialog1

            .Filter = "All Files|*.*|Bitmaps|*.bmp|GIFs|*.gif|JPEGs|*.jpg"
            .FilterIndex = 2
        End With

**this code open an dialoge file with certen type

            Dim s As EventArgs
            Button3_Click(Nothing, s)
            With img
                .Image = Image.FromFile(OpenFileDialog1.FileName)
                .SizeMode = PictureBoxSizeMode.CenterImage
                .BorderStyle = BorderStyle.Fixed3D
            End With
            lblimgurl.Text = OpenFileDialog1.FileName
        End If

**and this code read the imge from the file

3.

stor the imge in database

   Dim arrFilename() As String = Split(lblimgurl.Text, "\")
    arrFilename.Reverse(arrFilename)
            Dim ms As New MemoryStream
            img.Image.Save(ms, img.Image.RawFormat)
            Dim arrImage() As Byte = ms.GetBuffer
   ms.Close()
            VAOIMG_IMAGE = arrImage

**this code read the imge

then make the command with parameter of type imge and assigne the VAOIMG_IMAGE

to the parameter

example

dim parmeter as new sqlparameter

parameter.value=VAOIMG_IMAGE

and the execute the comand

4.

to read the data from data base execute an command by datareader

like thats

dim sqlselect as new sqlcommand

sqlselect.CommandText="select * from tabel"

dim r as datareader =sqlselect.executeReader

while r.read

dim VAOIMG_IMAGE as byte()

VAOIMG_IMAGE =r(columen name Of imge In database)

5.to bute the imge in the screen

 Dim arrPicture As Byte()
        If Not obj.VAOIMG_IMAGE Is Nothing Then


            arrPicture = obj.VAOIMG_IMAGE
            Dim ms As New MemoryStream(arrPicture)

            With img
                .Image = Image.FromStream(ms)
                .SizeMode = PictureBoxSizeMode.CenterImage
                .BorderStyle = BorderStyle.Fixed3D
            End With
        End If

thats all aboute imge in database

*****************************************************************************************

imge in file

thats way is very easy

just retreave the url from dat base as string then

write

 (the url from databse as string)Image = Image.FromFile

finally cood luck

aske about any thing u not understand

bye

#12

السلام عليكم

في الحقيقة تعجبت من رد أخوي بإن مسألة المسار أفضل من حفظ الصورة في قاعدة البيانات, وكذلك أنهما تجاهلا محاسن

هذه الطريقة , أقول و بالله التوفيق مسألة المسار تعطي أفضليه في سرعة إستدعاء البيانات فقط لا غير....

بينما حفظ الصورة في قاعدة البيانات يقيها من الضياع و المسح و تكون في مأمن أكثر من لو أنها كانت في مسار معين.

بقَيت الان مسألة حجم الصورة , يمكن حل هذه المسألة عن طريق التحقق من حجم الصورة قبل المضي في إدراجها في القاعدة

كيف يتم ذلك, يتم عن طريق إعطاء حجم معين مثلاً 15 كيلو بايت كحد أقصى للصورة. شاهد النص التالي.

If .ShowDialog = DialogResult.OK Then
            'Check the Image size before resize it
            Dim FInfo As New System.IO.FileInfo(.FileName)
            Dim FileSize As Integer = (FInfo.Length \ 1024)
            If FileSize > 15 Then 'if bigger than 15 KB Refuse it
                Return 'cancel Insertion
            Else
                ' To Insert Image
                Dim st As New FileStream(.FileName, FileMode.Open, FileAccess.Read)
                Dim mbr As BinaryReader = New BinaryReader(st)
                Dim buffer(st.Length) As Byte
                mbr.Read(buffer, 0, CInt(st.Length))
                st.Close()
                CnnMain.Open()
                Dim cmd As New SqlClient.SqlCommand("sp_InsertImages", CnnMain)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Add("@WColumn", SqlDbType.TinyInt).Value = WhichColumn
                cmd.Parameters.Add("@Picture", SqlDbType.Image).Value = buffer
                cmd.Parameters.Add("@SN", SqlDbType.Int).Value = Integer.Parse(txtSerialNumber.Text)
                cmd.ExecuteNonQuery()
                CnnMain.Close()
                cmd.Dispose()
                ImageStateInfo = "تم إضافة الصورة إلى قاعدة البيانات بنجاح"
            End If

طبعاً هذا إذا كانت الصورة تدرج عن طريق ( صندوق الحوار) OpenFileDialog

أما إذا كانت الصورة تدرج من كامرة موصلة بالجهاز فيكون بهذا المنطق التالي:

 Dim ImgSize As Integer
            Dim m As New MemoryStream
            Box.Image.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg)
            Dim b(m.Length - 1) As Byte
            m.Position = 0
            m.Read(b, 0, m.Length)
            ImgSize = Math.Round(m.Length / 1024)
            'Check if the size Exceed the Limit
            If ImgSize > 15 Then
                Return 'refuse it 
            Else
                'call third party Save Method 
            End If

فإذا تمكنت من تحجيم الصور فقد حزت على الافضليتين الاولى صور صغيرة و الثانية آمنه في قاعدة البيانات.

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

اي في المسار فتارة يقوم المستخدم بعملية Overwrite على الصورة و أحيانا تدخل صورة شخص محل شخص أخر. و أحياناً

شخص بدون صورة , وتم حل هذه المشكلة بأن قمنا بإنشاء برنامج على الـ NET. يقوم بحفظ الصور في قاعدة البيانات SQL مباشرتاً

و من الكامرة إلى القاعدة وبذلك ولله الحمد و المنه تخلصنا من مشاكل كثيرة بفضل الله أولاً ثم فضل هذا الحل الناجع.

والخيار لك أخي العزيز.

كذلك وهذا مهم إذا كان المشروع يتضمن تقارير فحدد نوع الصور على النمط JPG فقط

السبب كون بعض الانواع مثل GIF قد لا تظهر في التقرير , فإنتبه لذلك.

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

 'Filtering to show only the Image With jpg 
                .Filter = "Image Files(*.JPG)|*.JPG"

أو عن طريق الكود بهذا الشكل

 Private Function ImageKind(ByVal Path As String) As Boolean
        Dim ImageExtention() As String = Split(Path, ("."))
        Array.Reverse(ImageExtention)
        Dim Ext As String = ImageExtention(0)
        If Ext <> "jpg" Then
            Return False
        End If
        Return True
    End Function

أرفق لك مشروع يقوم بإدخال الصور في قاعدة ACCESS DataBase و يتحقق من الصورة قبل ذلك.

ولكن ليس هذا هو الحل الافضل بسبب أن البرنامج يقوم بجلب الصور في الـ DataSet وهذا بلا شك يرهق البرنامج

والحل الافضل أن يتم قراءة الصورة من قاعدة البيانات وجلبها في Picture box فقط دون العناء بجلب كل الصور

في الـ DataSet , يكون بحول الله بهذا الشكل.

Private Sub ReadImages()
        Try
            pboxAuthor.Image = Nothing
            Dim str As String = "SELECT AuthorPicture FROM Authors WHERE AuthorID ='" & Me.txtAutorID.Text & "'"
            Dim cmdImage As New SqlCommand(str, CnnMain)
            Dim b() As Byte
            CnnMain.Open()
            If Not IsDBNull(cmdImage.ExecuteScalar) Then
                b = cmdImage.ExecuteScalar()
                If (Not b Is Nothing) Then
                    Dim stream As New MemoryStream(b, True)
                    stream.Write(b, 0, b.Length)
                    pboxAuthor.Image = New Bitmap(stream)
                    stream.Close()
                End If
            End If
        Catch ex As Exception
            Throw ex
        Finally
            CnnMain.Close()
        End Try
    End Sub

بالتوفيق إن شاء الله.

embdedImages.zip

في المثال يتضح المقال

#13

اخي غملاسي المثال رائع وافادني بدرجه 100% لانه في الصميم

اشكرك الف شكر بارك الله في وجعله في ميزان حسناتك

واسف لكثره اسالتي لاني جديد شويه في اللغه

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#14

شكرا اخي الغملاسي على الكود المهم

اخي الغمــــلاسي كونك تعاملت مع هذا النوع من البرمجيات هل توجد اي مشكلة في من ناحية زيادة حجم قاعدة البيانات حيث 15KB ليس بالهين، كذلك اظن ان مثالك يكون ذو جود عالية على قاعدة بيانات SQL Server ؟ اين ان هذا الحل لا يجدي لبطئ قاعدة بيانات الاكسس ، اليس كذلك؟

اخي الكريم الغمـــــــــــــــــــــــــلاسـي يوجد نقطة مهمة مش عارف انت اخذت بالك منها ام لا

الاخ HASHAD_MAHMOUD كان يريد ان يعرض صور الموظفين بالتتالي اي انه عندما يضغط على زر التالي في نموذج بيانات الموظفين هذا سوف يؤدي الي الي تغير الصور مع تغير بيانات كل موظف

؟

هل الكود يعمل في هذه الحالة ؟ اذا كان يعمل بدون بطئ في البرنامج فسوف يكون اكثر من رائع

ممكن اخــــــــــــــــــــــــــــــــــــــــــــــــــــــــي HASHAD_MAHMOUD تخبرني بالنتيجة؟

جزاكم الله خيرا

#15

السلام عليكم

لا شكر على واجب أخي العزيز.

أخي الكريم Wise بصراحه قاعدة أكسس ربما كانت للأعمال الشخصية أو الاعمال التي لا تتطلب مستخدمين كثر أو وظائف كالصور

أو الوثائق. لذلك الكلام أصلاً يرمي إلى SQL .

اقتباس
اخي الكريم الغمـــــــــــــــــــــــــلاسـي يوجد نقطة مهمة مش عارف انت اخذت بالك منها ام لا

الاخ HASHAD_MAHMOUD كان يريد ان يعرض صور الموظفين بالتتالي اي انه عندما يضغط على زر التالي في نموذج بيانات الموظفين هذا سوف يؤدي الي الي تغير الصور مع تغير بيانات كل موظف

أقول بارك الله فيك, لدينا قاعدة بيانات تحوي 64 ألف صورة (ثلاثة صور للشخص) الحد الاقصى لكل صورة هي 100 كيلوبايت , وثلاث صور كوثائق لهذا الشخص, الحد الاقصى لكل وثيقة400 كيلوبايت. ويتم جلب هذه الصور الست في عملية التصفح

ولا توجد أدنى مشكلة في ذلك ولم يشتكي موظف ما عن بطء قط. علماً أن الصور لا تُجلب مع الـ DataSet و إنما تجلب من قاعدة

البيانات مباشرتاً في كل العمليات البحث و التصفح و التعديل...

اقتباس
هل الكود يعمل في هذه الحالة ؟ اذا كان يعمل بدون بطئ في البرنامج فسوف يكون اكثر من رائع

لا تكاد تشعر أن البرنامج يستدعي الصور من قاعدة البيانات,كل الذي يرى البرنامج يظن أن البرنامج يستدعيها من الـ DataSet

وبالله التوفيق .. السلام عليكم

في المثال يتضح المقال

#16

شكرا اخي الغملاسي على توضيحك

معلش سوؤالين عشان الموضوع يتضح في ذهني

اقتباس
ولا توجد أدنى مشكلة في ذلك ولم يشتكي موظف ما عن بطء قط. علماً أن الصور لا تُجلب مع الـ DataSet و إنما تجلب من قاعدة

هل في هذا الحالة الكود الذي وضعته يقوم بعملية التحرك بين سجلات؟

ام هناك كود اخر لجعل صورة كل الموظف تتحرك مع تغير كل سجل؟

كذلك ماذا يحدث في حالة قام اكثر من مستخدم من تشغيل نفس الفورم التي يظهر فيها بيانات الموظفين و صورهم فانت تقول اننا سوف نستخدم وضع الاتصال مع الصور فهذا معناه انه سوف يحدث خطأ في حالة قيام اكثر من مستخدم في حالة الاضافة او التعديل و ربما القراءة

معذرة اخي بس هذه نقط فنية لا يعلمها الا من تعامل معاها

تحيبة طيبة لك اخي الكريم

#17

السلام عليكم

اقتباس
هل في هذا الحالة الكود الذي وضعته يقوم بعملية التحرك بين سجلات؟
نعم الكود السابق وهو ReadImage هو المسؤول عن الإبحار في الصور , كل الذي عليك مناداة هذا الاجراء عند عملية التصفح فقط.
اقتباس
فانت تقول اننا سوف نستخدم وضع الاتصال مع الصور فهذا معناه انه سوف يحدث خطأ
أخي أحسن الله إليك, أنا لم أقل هذا الكلام!! و إنما قلت ((نجلب)) الصورة من القاعدة فقط وتكون منفصلة عن الصورة الاصلية .

أما إذا كنت تقصد مسألة الـ Cuncurrent Users فهذا أمر أخر ليس له علاقة بوجود الصورة من عدمها,

لانه المسألة شامله على أي نوع من الاتصال و باي لغة أو واجهة.

لقد وضعت فيما سبق برنامج شبه كامل عن مسألة الصور إبحث في المنتدى عنه وهو باسم BookAuthorsApplication

لعله يوضح الفكرة أكثر.

بالتوفيق إن شاء الله.

في المثال يتضح المقال

#18

جزاكم الله كل خيرا اخي الكريم الغمــــلاسي

للاسف بحثت عنه و لم اجد هذا المشروع

بالتوفيق ان شاء الله

تم تعديل هذه المشاركة بواسطة Wise في 9 نوفمبر 2005 في 15:14

#19

السلام عليكم

جزاك الله خير, تفضل هذا الرابط

ملاحظة المشروع مبنى على قاعدة بيانات SQL.

لتحميل المشروع مباشرتاً إضغط هنا

أرفق لك نسخة ربما أحدث من سابقتها,(لكن ربما ليس خالي من المشاكل و العيوب) بالتوفيق إن شاء الله.

BookAuthorsApplication.zip

تم تعديل هذه المشاركة بواسطة الغملاسي في 9 نوفمبر 2005 في 21:27

في المثال يتضح المقال

#20

الصراحه اخي غملاسي انا مش عارف اشكرك ازاي الصراحه كفيت ووفيت

وايضا اخيWise

بارك الله فيكما

وشكرااا

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#21

جزاك الله خيرا كل الخير اخي الغملاسي

و بالتوفيق دائما اخي HASHAD_MAHMOUD

هذا الموضوع مغلق.

مواضيع مشابهة