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

عودة مع مشكلة الصورة وإضافتها لقاعدة البيانات

بدأه مصطفى_ظيمة في 2 يوليو 2011 · 29 رد · 1,946 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

الأخوة مشرفى وخبراء هذا المنتدى الجميل

الموضوع باختصار هو :

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

الموضوع انا عارف انه سهل وبسيط لكن المشكلة انه فى المثال المرفق مش كل بيان هيكون له صورة يعنى فيه بيانات ليها صورة وبيانات لأ

المشكلة إزاى بقى اجعل عملية إضافة الصورة اختيارية بمعنى ادق

كيف يمكن حفظ البيانات بدون صورة من غير ما تاخد مساحة من قاعدة البيانات أو إضافة صورة للبيان فى حالة أخرى

الحقيقة انا حاولت مع الموضوع كتير ولكنى فشلت

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

ولكم جزيل الشكر والامتنان

أرجو الاهتمام لان الموضوع ضرورى جدا عندى

والله المستعان

ملحوطة : حقل الصورة اسمه Picture من نوع كائن OLE

المثال :

مصطفى2.rar

تم تعديل هذه المشاركة بواسطة مصطفى_ظيمة في 2 يوليو 2011 في 05:27

#2

السلام عليكم و رحمة الله

أنا نزلت البرنامج و ما شفت أي تعريف في المدوال بخصوص حفظ ملفات الميديا فما أدري انت أي طريقه اتبعت بصراحه و لكن العمليه جدا سهله و بسيطه و راح أشرحها لك خطوه بخطوه :

أولا في التعريفات العامة بالموديوال

Module 1 : General Declarations:

Public ImageStream As New ADOB.Stream

ثانيا في الحدث الخاص بتحميل الصوره عن الضغط على الزر الخاص بها

Command1_Click

CommonDialog1.Filter = "Image Files(*.JPG;)*.JPG"
CommonDialog1.ShowOpen

ملاحظة: بالامكان الاستغناء عن فلتر الملفات أو تعديله أكثر ليصبح (اختياري):

CommonDialog1.Filter = "Image Files(*.JPG;)*.JPG"
CommonDialog1.ShowOpen
On Error GoTo 1
Image1.Picture = LoadPicture(CommonDialog1.FileName)

1:
If Err.Number = 481 Then
    MsgBox "Application Support File Extension *.jpg Only", vbCritical, "Error"
    Exit Sub
End If

ثالثا: في الحدث الخاص بحفظ الصوره أو زر الحفظ:

Command2_click

ضع شرط تحقق من أن أداة الصوره ليست خاليه :

If Image1.Picture <> Empty  then
ImageStream.LoadFromFile CommonDialog1.FileName
end if

RS.AddNew
RS("field1") = text1.text
RS("field2") = text2.text
RS("Picture") = ImageStream.Read
RS.Update

رابعا: في زر البحث او عرض البيانات

Command3_click

Set Image1.DataSource = RS
Image1.DataField = "Picture"

أو عشان يطلع الصوره ايضا كملف لو حبيت تنسخها :

On Error GoTo 1
ImageStream.Write RS("Picture")
ImageStream.SaveToFile (App.Path & "\Scanned\Search.jpg"), adSaveCreateOverWrite
Image1.Picture = LoadPicture(App.Path & "\Scanned\Search.jpg")
1:
If Err.Number = 3001 Then
    Exit Sub
End If

المسأله جدا سهله و بسيطه , ما حبيت أعدلها على برنامج و ارفعها من جديد لان الافضل انت تعملها و بكذا تكسب خبره اكثر عليها .

بالتوفيق ...

تم تعديل هذه المشاركة بواسطة iProgrammer في 3 يوليو 2011 في 21:04

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#3

الأخ iProgrammer انا باعتذر ليك

لكن فشلت فى تكييف الأكواد مع البرنامج حيث تظهر لى أخطاء

فلو سمحت ياريت تعدلى على المثال السابق ولك جزيل الشكر والامتنان

#4

المعذره الخطأ مني , نسيت أمرين أساسين :

1- إستبدل مكتبه ال ADO الحاليه بمكتبة أحدث منها , مثل 2.8 أو 6 اللي بآخر تحديث لان المكتبه اللي انت شغال عليها حاليا ما تدعم الـ Stream

2- عند فتح السجلات RS لابد أيضا تفتح معاه الستريم من خلال الكود :

ImageStream.Type = adTypeBinary
ImageStream.Open

بكذا راح يعمل البرنامج و يحفظ الصور أكيد .

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#5

الأخ iProgrammer

انا باستخدم المكتبة Microsoft ADO Data Control 6.0

أنظر الصور

post-177950-039464300 1309801887_thumb.p

post-177950-075698200 1309802023_thumb.p

post-177950-090904700 1309802155_thumb.p

المرفقات
7-4-2011 8-48-54 PM.png7-4-2011 8-51-42 PM.png7-4-2011 8-54-42 PM.png
#6

ال ADO Data Control هذي مكتبه أخرى مالنا علاقه فيها حاليا..

ال Microsoft ActiveX Data Control 2.8 أو 6.0 تدعم ال Stream و في المثال انت كاتب الكود خطأ و الصحيح:

Public ImageStream As New ADODB.Stream

تحيه ...

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#7

الأخ iProgrammer

معلش استحملنى شوية انا عارف انى تعبتك معايا

عند إضافة سجل جديد بدون صورة يظهر هذا الخطأ فما سبب هذا الخطأ

post-177950-099156700 1309892416_thumb.p

post-177950-005116000 1309892177_thumb.p

ملحوظة : عند إضافة On Error Resume Next

يختفى الخطأ ويتم الحفظ بدون مشاكل

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

المرفقات
7-5-2011 9-52-30 PM.png7-5-2011 9-47-21 PM.png
#8

بالنسبة للخطأ عزيزي لابد توضع لي رسالة الخطأ بالتفصيل و رقم الخطأ عشان أقدر أحدد المشكلة و نحلها سوا , المهم الآن وصلنا لنقطه الحفظ و العرض و الحمد لله .

بالنسبة للبطئ فهذا شي طبيعي جداً لانك عزيزي تتعامل مع كائات أو OLE Objects و اللي يأثر على هالشي عوامل كثيره ما أقدر احصرها و لكن ممكن نقول :

1- نوع القواعد البيانات و انت في هالحاله تستخدم آكسس لا تنسى هالشي

2- عدد الكائنات و السجلات المحفوظه .. راعي ان آكسس كحد اقصى تقريبا ما تتحمل اكثر من 4 او 5 قيقا تقريبا

3- ايضا ان عمليه حفظ الكائنات المتبعه و هي التحويل الى نظام أحادي Binary للحفظ في قاعدة البيانات و للعرض يرجع يحولها لك من جديد و هالعمليه لابد تتطلب وقت حسب قدره الجهاز و حسب حجم الكائن و حسب عوامل لا تحصى و هذا باب آخر تماما

البطئ له اسباب اكثر من اللي ذكرتها انا , ولكن ما اعتقد ان البطئ عندك بمعنى بطئ فعلي , هل يعني البطئ عندك بالثواني؟ أو فقط مجرد أجزاء من الثانيه و ينتقل للسجل الثاني؟

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#9

الصوره الاولى ماكانت ظاهره امس , و اليوم شفتها عموما عزيزي انت ربطت شرط فتح الستريم Stram بان أداة الصورة ماتكون فاضيه و هذا في نظري ماله علاقه أساسا بالموضوع .

شيل فتح ال strem من شرط التحقق و خليه مع فتح باقي السجلات بشكل عادي.

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#10

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

او

الادو غير مفتوح

musab abdo hassan

#11

الأخ iProgrammer

تقصد انه يكون الكود هكذا

 If Image1.Picture <> Empty Then
          ImageStream.Type = adTypeBinary

        ImageStream.LoadFromFile CommonDialog1.FileName
        End If
 ImageStream.Open

    With rs
     If AddOREdit = True Then .AddNew
        rs("code") = Text1.Text
        rs("num") = Text2.Text
        rs("kind") = Combo1.Text
        rs("source") = Text4.Text
        rs("tex") = Text5.Text
        rs("notes") = Text6.Text
        rs("Picture") = ImageStream.Read


    .Update

    End With
#12

بهالطريقه عزيزي راح يحصل التالي:

أول مره تعمل حفظ أو تحديث راح تكون العمليه بدون أخطاء و لكن ثاني مره راح يقولك لا و يعطيك اعتراض ان ال Object Open لهذا عندك بعض الحلول :

1- تخلي فتح السجل مع مثلا فتح السجل RS من المدوال أو في الحدث form_load براحتك بحيث ما يتكرر (أنا افضل هالطريقه لانك مش محتاج تفتح و تسكر السجل), أو :

2- الطريقه الاخرى اذا تبغى تخليه من ضمن الكود الخاص بالحفظ لابد تضيف هذا الجزء :

if ImageStream.Stat = 1 then
ImageStream.close
End if 

ImageStream.Open

و شرح الكود:

وضعنا شرط تحقق من حالة السجل في حاله انه مفتوح أي = 1 راح يقفل السجل و بعدين يطلع من الشرط و يفتحه من جديد و بكذا ما تحصل لك ظهور رساله خطأ من جديد.

تم تعديل هذه المشاركة بواسطة iProgrammer في 7 يوليو 2011 في 03:12

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#13

1- تخلي فتح السجل مع مثلا فتح السجل RS من المدوال أو في الحدث form_load براحتك بحيث ما يتكرر (أنا افضل هالطريقه لانك مش محتاج تفتح و تسكر السجل), أو :

الحقيقة يا أخى انا مش فاهم الطريقة دى ممكن توضيح اكتر

#14

السلام عليكم

RS.Open <<< هذا الكود انت وين وضعته؟

أوضع معاه في نفس المنطقه ImageStrem.Open

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#15

الأخ iProgrammer

السلام عليكم

لقد وضعت الكود حيث أشرت

والنتيجة فى الصورة

post-177950-064952800 1310144011_thumb.p

اذا أردت ارفع لك المثال لثقوم بالتجريب والتعديل عليه

انتظر الرد

المرفقات
3.png
#16

up

#17

عزيزي حط الكود في الحدث form_load أفضل كل انا اعتقد انك فاتح السجل RS من الفورم لود أول ما يتحمل البرنامج و لكن انت فاتحه من داخل Public Sub, عموما ضع فتح السجل ImageStream في الحدث Form_Load و خلاص كذا افضل عشان ما تتوه كثير.

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#18

الاخ iProgrammer

لقد وضعت الكود ImageStream.Open فى حدث Form Load وكانت النتيجة كالتالى عن إضافة سجل جديد بدون صورة

post-177950-091914900 1310335534_thumb.p

post-177950-046464400 1310335560_thumb.p

المرفقات
4.png5.png
#19

للرفع

#20

المعذره , كان عندي مشاريع لابد أسلمها و امتحانات :)

اخي شفت شرط التحقق اللي فوق With Rs

شيله و حطه تحت و لكن قبل .Update

و شيل RS("Picture") = ImageStream.Read و حطها معاهم بحيث يصبح كل شي مثل كذا

RS.AddNew

RS("field1") = text1.text

RS("field2") = text2.text

If Image1.Picture <> Empty then

ImageStream.LoadFromFile CommonDialog1.FileName

RS("Picture") = ImageStream.Read

end if

RS.Update

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#21

اخى الفاضل الأخ iProgrammer

تم تعديل الكود بالشكل اللى حضرتك وضحته فى المشاركة السابقة

ولكن الكود فى هذه الحالة يقوم بحفظ البيانات من غير صورة نهائيا

يعنى عند إضافة صورة إلى البيانات يتم حفظ البيان ولا يتم حفظ الصورة

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

تم تعديل هذه المشاركة بواسطة مصطفى_ظيمة في 19 يوليو 2011 في 21:24

#22

إرفع لي المثال مره ثانيه

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#24

مصطفى2.rar السلام عليكم

تفضل أخي ...

الان شغال بدون أخطاء

طبعا عرض الصوره انا حطيته في الحدث dbClick الخاص بالـ viewList

تحيه ...

تم تعديل هذه المشاركة بواسطة iProgrammer في 22 يوليو 2011 في 03:04

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#25

اخى الفاضل iProgrammer

مازال الخطأ قائم

انظر بنفسك

مصطفى2.rar

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…