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


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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [تم الحل] مشكلة فى تحويل مشروع تفقيط من vb.net الى #C maxruined 4 72 أمس, 07:06 PM
آخر رد: asemshahen5
  [تم الحل]مشكلة فى جلب قيمة من داتا جريد فيو maxruined 37 583 15-07-19, 04:36 PM
آخر رد: asemshahen5
  [C#.NET] اضافه البيانات والتعديل عليها من خلال الداتا فيو مباشرا amonem 7 227 09-07-19, 10:01 AM
آخر رد: amonem
  اضافه البيانات والتعديل عليها من خلال الداتا فيو مباشرا سي شارب amonem 10 207 08-07-19, 11:17 PM
آخر رد: amonem
  جلب ١٠ اسطر من قاعدة البيانات Rabeea Qbaha 9 253 22-06-19, 01:20 AM
آخر رد: elgokr
  تحويل عدد ساعات العمل من عشري (٢٫٧٥) الى - "HH:MM" في التقارير - تم الحل Rabeea Qbaha 7 200 16-06-19, 01:48 PM
آخر رد: elgokr
  أريد تغيير إتجاه أداة TreeListView من اليمين إلى اليسار [تم الحل] asemshahen5 6 220 23-05-19, 06:38 AM
آخر رد: asemshahen5
  مشكلة فى برنامج اضافة وعرض اى نوع من الملفات داخل قاعدة بيانات SQL maxruined 11 367 19-05-19, 03:11 AM
آخر رد: elgokr
  [تم الحل] مشكلة فى طرح خانتين من بعض maxruined 31 842 26-04-19, 10:49 AM
آخر رد: elgokr
  عمل برنامج لكن لم يفتح قاعدة البيانات ايش السبب ابن دوعن 1 171 21-04-19, 11:54 PM
آخر رد: elgokr

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


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