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


الملفات المرفقة
.rar   TTT5.rar (الحجم : 1,021.8 ك ب / التحميلات : 17)
الرد
تم الشكر بواسطة: عبد العزيز البسكري , asemshahen5
#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 , حريف برمجة , asemshahen5 , الرائد
#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

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

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: ابراهيم ايبو , asemshahen5
#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");

الرد
تم الشكر بواسطة: asemshahen5
#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 , asemshahen5


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مساعدة باعادة تصميم قاعدة بيانات. Rabeea Qbaha 5 179 17-11-19, 07:25 AM
آخر رد: new2016
Thumbs Up [C#.NET] كيف أحفظ الصورة في مسار وربطه بقاعدة البيانات Sqlserverثم إعادة قرائته مرة اخرى محمد جمعه 1 81 29-10-19, 01:16 PM
آخر رد: asemshahen5
  موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات Rabeea Qbaha 11 371 08-10-19, 04:54 PM
آخر رد: elgokr
  مساعدة بخصوص حفظ و عرض الصور من قاعدة بيانات sql server vivinecoryate 4 171 06-10-19, 02:26 PM
آخر رد: kiki
  مشكلة في تعديل سجل في قاعدة بيانات اكسيس asemshahen5 5 211 06-10-19, 02:23 PM
آخر رد: kiki
  [C#.NET] ظهور البيانات في الداتا غريد وليد العمران 1 134 25-09-19, 03:31 PM
آخر رد: Rabeea Qbaha
  [تم الحل] مشكلة فى جمع سطر فى جدول مع سطر اخر maxruined 8 314 31-08-19, 06:47 PM
آخر رد: asemshahen5
  طلب مساعدة في انشاء استدعاء بيانات من قاعدة اكسس العريفي 0 115 31-08-19, 01:45 PM
آخر رد: العريفي
  [تم الحل]مشكلة فى جلب قيمة من داتا جريد فيو maxruined 74 2,534 26-08-19, 07:29 PM
آخر رد: maxruined
  [تم الحل] مشكلة فى تحويل مشروع تفقيط من vb.net الى #C maxruined 13 735 26-08-19, 07:14 PM
آخر رد: maxruined

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


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