منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175)
+--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176)
+--- الموضوع : لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات (/showthread.php?tid=36839)



لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - Rabeea Qbaha - 04-11-20

السلام عليم

أواجة مشكلة غريبة بعد العودة للعمل في قواعد access
عندما اقوم بمناداة دالة جلب البيانات من قاعدة البيانات عند الاضافة او الحذف لتحديث البيانات
الدالة تعمل بشكل جيد عند تشغيل الفورم لكن عند مناداتها خلال التشغيل من خلال button لا يتم التحديث إالا بعد مناداه الدالة مرتان و 3 مرات

لا اعلم السبب لحدوث هذا 

هذا الكود لو تكرمتم :



RE: لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - kiki - 04-11-20

وعليكم السلام ورحمة الله وبركاته
يبدو ان المشكلة لديك فى هذا الجزء من جود الحذف
SelectedRows[0]
لماذا تحدد السطر 0 (الاول) دائماً وانت من الممكن ان تكون محدد السطر اخر عند الحذف


RE: لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - Rabeea Qbaha - 04-11-20

(04-11-20, 06:10 AM)kiki كتب : وعليكم السلام ورحمة الله وبركاته
يبدو ان المشكلة لديك فى هذا الجزء من جود الحذف
SelectedRows[0]
لماذا تحدد السطر 0 (الاول) دائماً وانت من الممكن ان تكون محدد السطر اخر عند الحذف

مرحبا صديقي، مشكلتي ليست بالحذف، الاكواد جميعها تعمل جيدا لكن دالة تحديث البيانات فب الجريد فيو لا تعمل إلا عند مناداتها عدة مرات، هذه هي مشكلتي.

بالنسبة لـ SelectedRows[0]  تعني السطر المحدد من قبل المستخدم لا تعني السطر الاول. فهي ترجع قيمة الخليه 0 في السطر المحدد حتى لو كان السطر رقم 100


RE: لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - Anas Mahmoud - 04-11-20

بعد تجربة كبيرة من الامس في البداية شككت في الداتا جريد فيو

ولكن بالنهاية اكتشفت انها بريئة وان السبب في قاعدة البيانات ، لسبب ما لا اعلمه يتم تنفيذ الامر ببطء شديد جدا

لذلك عند اضافة عنصر جديد مثلا ، نحن نتوقع ان العنصر تم اضافته فعلا لقاعدة البيانات ، ثم نقوم بطلب الجدول كاملا ولكن التغيرات لا تكون قد حدثت فعلا فيعود بالجدول في الحالة القديمة

لا علاقة لعدد المرات في الموضوع ، لو وضعت زرا يقوم بتحديث الجريد فيو ستكتشف انه يجب الانتظار لبعض الوقت قبل ان تكون التغيرات فعالة

هذه ان صحت طبعا احد كوارث الاكسس


RE: لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - Rabeea Qbaha - 04-11-20

(04-11-20, 03:45 PM)Anas Mahmoud كتب : بعد تجربة كبيرة من الامس في البداية شككت في الداتا جريد فيو

ولكن بالنهاية اكتشفت انها بريئة وان السبب في قاعدة البيانات ، لسبب ما لا اعلمه يتم تنفيذ الامر ببطء شديد جدا

لذلك عند اضافة عنصر جديد مثلا ، نحن نتوقع ان العنصر تم اضافته فعلا لقاعدة البيانات ، ثم نقوم بطلب الجدول كاملا ولكن التغيرات لا تكون قد حدثت فعلا فيعود بالجدول في الحالة القديمة

لا علاقة لعدد المرات في الموضوع ، لو وضعت زرا يقوم بتحديث الجريد فيو ستكتشف انه يجب الانتظار لبعض الوقت قبل ان تكون التغيرات فعالة

هذه ان صحت طبعا احد كوارث الاكسس

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


RE: لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - Anas Mahmoud - 04-11-20

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

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

كود :
           using (OleDbConnection connection = new OleDbConnection(ConnectionString))
           using (OleDbCommand command = new OleDbCommand("Insert into Customers (category,cname, cphone1,cphone2,cemail, caddress, cnote) VALUES (@category,@cname, @cphone1,@cphone2,@cemail, @caddress, @cnote)", connection))
           {

               command.Parameters.AddWithValue("@category", category_txt.Text.Trim());
               command.Parameters.AddWithValue("@cname", txt_name.Text.Trim());
               command.Parameters.AddWithValue("@cphone1", txt_phone.Text.Trim());
               command.Parameters.AddWithValue("@cphone2", txt_phone2.Text.Trim());
               command.Parameters.AddWithValue("@cemail", txt_email.Text.Trim());
               command.Parameters.AddWithValue("@caddress", Location_txt.Text.Trim());
               command.Parameters.AddWithValue("@cnote", Note_txt.Text.Trim());
               connection.Open();
                               command.ExecuteNonQuery();
               connection.Close();
           }

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

عدلت مثالك ليعمل كما المطلوب ، عدلت في ملف DB_connection.cs الاسلوب ليعتمد على الاتصالت المفتوحة لحظيا فقط وحذفت الاتصال العام وكذلك عدلت باقى الملفات على السريع لتماشي هذا الاسلوب ومشت الامور كما ينبغي ، اعتقد انك ستقوم بتغير الاسلوب المتبع باذن الله
تحياتي


RE: لا يتم التحديث بيانات الداتا جريد إالا بعد مناداه الدالة مرتان و 3 مرات - Rabeea Qbaha - 05-11-20

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

شكرا لك صديقي انس ساتفقد طريقتك و اقوم بتطوير طريقتي.