تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[C#.NET] [تم الحل]حذف صورة مخزنة خارج قاعدة البيانات
#1
السلام عليكم ورحمة الله وبركاته
اخوتي الكرام
هذا مثال لحفظ بيانات في قاعدة بيانات اكسس ولامشكلة مع البيانات او تخزين الصورة
المشكلة هي عندما اقوم بحذف سجل  يتم حذف السجل لكن الصورة لاتنحذف وتطهر رسالة 
مفادها ان الصورة مستخدمة ولايمكن حذفها وعملت جاهدا لكن دون جدوى عقلي في حالة جمود هذه الايام
فضلا لو تكرمتم حل هذه المشكلة 
مرفق البرنامج 


الملفات المرفقة
.rar   TTT5.rar (الحجم : 1,021.8 ك ب / التحميلات : 9)
الرد
تم الشكر بواسطة: عبد العزيز البسكري
#2
وعليكم السلام ورحمة الله وبركاته ،،

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

الحل :

كود :
// ==================   كود تحميل وجلب صورة
       private void Btn_LoadPicture_Click(object sender, EventArgs e)
       {
           try
           {
                   OpenFileDialog ofd = new OpenFileDialog();

                   if ((ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK))
                   {

                   ofd.Filter = "JPEG,BMP,PNG  (*تحديد صورة)) (Select Image) |*.jpg;*.jpeg;*.bmp;*.png";
                       FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
                           byte[] filebytes = new byte[fs.Length];
                       fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));

                       Pb_VegFruit_Pic.Image = Image.FromStream(new System.IO.MemoryStream(filebytes));
                       fs.Close();
                       fs = null;
                   }
                   else
                   {
                       MessageBox.Show("عفواً الغي الأمر بناء على طلبك");
                       this.Focus();
               }

           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }
بسم الله الرحمن الرحيم > "اللَّهُ نُورُ السَّمَاوَاتِ وَالْأَرْضِ ۚ مَثَلُ نُورِهِ كَمِشْكَاةٍ فِيهَا مِصْبَاحٌ ۖ الْمِصْبَاحُ فِي زُجَاجَةٍ ۖ الزُّجَاجَةُ كَأَنَّهَا كَوْكَبٌ دُرِّيٌّ يُوقَدُ مِن شَجَرَةٍ مُّبَارَكَةٍ زَيْتُونَةٍ لَّا شَرْقِيَّةٍ وَلَا غَرْبِيَّةٍ يَكَادُ زَيْتُهَا يُضِيءُ وَلَوْ لَمْ تَمْسَسْهُ نَارٌ ۚ نُّورٌ عَلَىٰ نُورٍ ۗ يَهْدِي اللَّهُ لِنُورِهِ مَن يَشَاءُ ۚ وَيَضْرِبُ اللَّهُ الْأَمْثَالَ لِلنَّاسِ ۗ وَاللَّهُ بِكُلِّ شَيْءٍ عَلِيمٌ" < صدق الله العظيم
الرد
#3
السلام عليكم أخي حريف برمجة
نعم نعم تماما انا افتح الصورة الاصل لذلك تبقى مستخدمة من قبل البرنامج لقد فاتتني هذه النقطة
ولم اعد افكر سوى كبف احذف الصورة كم انت رائع ايها المنتدى يابيت الاوفياء انا ممتن لك جدا ياأخي
تقبل تحباتي واحترامي وتقييمي لعلمك وشخصك الكريم
الرد
تم الشكر بواسطة: elgokr , حريف برمجة
#4
وعليكم السلام ورحمة الله وبركاته

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

ولكن اتبع الشرح التالى وستتمكن من حل المشكلة
فى البداية تعال على كود الحذف الخاص بحدث Btn_Delete_Click


وقم باستبدال ما بداخل الحدث بهذا الكود
كود :
           try
           {
               if (MessageBox.Show("هل انت متأكد من حذف السجل؟", "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
               {
                   int EmpNum = int.Parse(Txt_VegFruit_Id.Text);
                   Delete_VegFruits(Convert.ToInt32(Txt_VegFruit_Id.Text));
                   Pb_VegFruit_Pic.Image.Dispose();
                   File.Delete("image\\" + EmpNum + ".jpg");

                   Cleardata_VegFruits();
                   SelectAll_VegFruits();
               }
               else
               {
                   return;
               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message, "alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }

الخطوة الثانية وهو تعديل على حدث بالداتا جريد
وهو حذف الكود الموجود بحدث Dgv_VF_SelectionChanged
او باصح نقل ما بداخل هذا الحدث لتقوم بانشاء حدث اخر 

للداتا جريد باسم Dgv_VF_Click وتضع به الكود التالى
كود :
           try
           {
               Txt_VegFruit_Id.Text = Dgv_VF.CurrentRow.Cells[0].Value.ToString();
               Txt_VegFruit_Name.Text = Dgv_VF.CurrentRow.Cells[1].Value.ToString();
               Cmb_VegFruit_Type.Text = Dgv_VF.CurrentRow.Cells[2].Value.ToString();
               Txt_VegFruit_About.Text = Dgv_VF.CurrentRow.Cells[3].Value.ToString();
               Txt_Notes.Text = Dgv_VF.CurrentRow.Cells[4].Value.ToString();
               Txt_ImgePath.Text = "image\\" + Txt_VegFruit_Id.Text + ".jpg";
               Pb_VegFruit_Pic.Image = Image.FromFile("image\\" + Txt_VegFruit_Id.Text + ".jpg");
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }

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

ملحوظة اخيرة فقط
ان تجعل البرنامج يعمل على بيئة 32Bit

لكونك تستخدم الاتصال بقاعدة البيانات 
PHP كود :
Microsoft.Jet.OLEDB.4.0 

فهو يعمل على بيئة 32Bit فقط
لم يحدث اى مشكلة لديك لكون جهازك على بيئة 32Bit
واذا قمت باختبار البرنامج بعد الانتهاء على بيئة 64Bit لن يعمل
الا اذا مكنت السورس ان يكون على بيئة 32Bit

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: ابراهيم ايبو
#5
السلام عليكم اخي حريف برمجة
 الصورة مخزنة في مجلد الصور  وعند عرض البيانات في datagridView  اقوم بجلب اسم الصورة واضعه في مربع نص الاسم
والصورة ايضا اجلبها وفق الكود التالي لعرضها في pictureBox هذا هو الاستخدام فقط ولاحاجة لعمل فتح صورة عن طريق openfileDialog
اريد فقط حذف الصورة مع السجل المراد حذفه بعني ارتباط الصورة مع السجل وعند حذف السجل تنحذف الصورة 
على كل حال ذهني غير صاف مشغول على امي واختي سلم الله غواليكم  أشكرك مرة اخرى ولاغنى عنك وعن رأيك ومشورتك
سأجد الحل ان شاء الله دمت بخير صدبقي
كود :
Txt_ImgePath.Text = "image\\" + Txt_VegFruit_Id.Text + ".jpg";
               Pb_VegFruit_Pic.Image = Image.FromFile("image\\" + Txt_VegFruit_Id.Text + ".jpg");

الرد
تم الشكر بواسطة:
#6
راجع ردي الاخير اخى الحبيب
وستتمكن من حل المشكلة تماماً

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
#7
السلام عليكم اخوتي الكرام 
اخي وحبيبي Elgokr تحية لك من القلب
انا لم الحظ ردك لانني عكفت على كتابة الحل وبتوفيق من الله تمكنت من ذلك 
حيث قمت بتعديل كود الحذف وعرفت متغير يحمل قيمة حقل الترقيم  ووضعت بعد كود حذف السجل  استدعاء الداتا ثم كود حذف الصورة
وعدلت كود Dgv_VF_SelectionChanged
يحيث استدعيت الصورة وحولتها الى مصفوفة ووضعتها في FileStream  ثم حملتها في مربع الصورة
ووضعت الحل ليستفيد منه الجميع



كود :
   private void Btn_Delete_Click(object sender, EventArgs e)
       {
          int EmpNum = int.Parse(Txt_VegFruit_Id.Text);
           try
           {
               if (MessageBox.Show("هل انت متأكد من حذف السجل؟", "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
               {
                   Delete_VegFruits(Convert.ToInt32(Txt_VegFruit_Id.Text));
                  // تمت اضافة هذا السطر
                   SelectAll_VegFruits();    // اعادة تحميل الداتا قبل حذف الصورة

                   File.Delete("image\\" + EmpNum + ".jpg");
              }
               else
               {
                   return;
               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message, "alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }
           Cleardata_VegFruits();
           SelectAll_VegFruits();

       }

       private void Btn_New_Click(object sender, EventArgs e)
       {
           Cleardata_VegFruits();
       }

       private void Dgv_VF_SelectionChanged(object sender, EventArgs e)
       {
           try
           {
               Txt_VegFruit_Id.Text = Dgv_VF.CurrentRow.Cells[0].Value.ToString();
               Txt_VegFruit_Name.Text = Dgv_VF.CurrentRow.Cells[1].Value.ToString();
               Cmb_VegFruit_Type.Text = Dgv_VF.CurrentRow.Cells[2].Value.ToString();
               Txt_VegFruit_About.Text = Dgv_VF.CurrentRow.Cells[3].Value.ToString();
               Txt_Notes.Text = Dgv_VF.CurrentRow.Cells[4].Value.ToString();
               Txt_ImgePath.Text = "image\\" + Txt_VegFruit_Id.Text + ".jpg";
               //Pb_VegFruit_Pic.Image = Image.FromFile("image\\" + Txt_VegFruit_Id.Text + ".jpg");
               // ثم تحميلها في مربع الصورة  (fs) هنا جلب الصورة وتحويلها الى بايت مصفوفة ثم وضعها في
               FileStream fs = new FileStream(Txt_ImgePath.Text, FileMode.Open, FileAccess.Read);
               byte[] filebytes = new byte[fs.Length];
               fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
               Pb_VegFruit_Pic.Image = Image.FromStream(new System.IO.MemoryStream(filebytes));
               fs.Close();
               fs = null;
               }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }


وسادرس كودك اخي الجوكر لاني دائما بحاجة لافكار خلاقة مثل افكارك دمت لنا بعد الله عونا وسلمت يداك تقبل احترامي
الرد
تم الشكر بواسطة: حريف برمجة , elgokr


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مشكلة فى برنامج اضافة وعرض اى نوع من الملفات داخل قاعدة بيانات SQL maxruined 11 171 19-05-19, 03:11 AM
آخر رد: elgokr
  [تم الحل] مشكلة فى طرح خانتين من بعض maxruined 31 596 26-04-19, 10:49 AM
آخر رد: elgokr
  عمل برنامج لكن لم يفتح قاعدة البيانات ايش السبب ابن دوعن 1 73 21-04-19, 11:54 PM
آخر رد: elgokr
  [تم الحل] مشكلة فى كود ال Update على SQL maxruined 7 237 11-04-19, 08:14 AM
آخر رد: elgokr
  خزن ملفات داخل قاعدة البيانات رسول555 16 553 06-04-19, 05:04 PM
آخر رد: elgokr
  [C#.NET] [تم الحل] كود حفظ الصورة يتعامل بازدواجية في الحفظ ابراهيم ايبو 5 200 03-04-19, 11:36 PM
آخر رد: ابراهيم ايبو
  [تم الحل] مشكلة الاتصال بقاعده بيانات SQL على الشبكة maxruined 4 175 01-04-19, 09:36 PM
آخر رد: elgokr
  [سؤال] برنامج كلاينت-سيرفر لإدخال البيانات hoob computer 1 141 30-03-19, 04:13 PM
آخر رد: elgokr
  اواجه مشكله تكرار البيانات ف الداتا جريد فيو Abdelrahman ala 11 320 28-03-19, 02:41 AM
آخر رد: Abu Ehab
  هل يمكنني اضافة صورة بدل الاداة الى المشروع غزوان خليل 0 106 28-01-19, 01:10 PM
آخر رد: غزوان خليل

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


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