السلام عليم
أواجة مشكلة غريبة بعد العودة للعمل في قواعد access
عندما اقوم بمناداة دالة جلب البيانات من قاعدة البيانات عند الاضافة او الحذف لتحديث البيانات
الدالة تعمل بشكل جيد عند تشغيل الفورم لكن عند مناداتها خلال التشغيل من خلال button لا يتم التحديث إالا بعد مناداه الدالة مرتان و 3 مرات
لا اعلم السبب لحدوث هذا
هذا الكود لو تكرمتم :
وعليكم السلام ورحمة الله وبركاته
يبدو ان المشكلة لديك فى هذا الجزء من جود الحذف
SelectedRows[0]
لماذا تحدد السطر 0 (الاول) دائماً وانت من الممكن ان تكون محدد السطر اخر عند الحذف
(04-11-20, 06:10 AM)kiki كتب : [ -> ]وعليكم السلام ورحمة الله وبركاته
يبدو ان المشكلة لديك فى هذا الجزء من جود الحذف
SelectedRows[0]
لماذا تحدد السطر 0 (الاول) دائماً وانت من الممكن ان تكون محدد السطر اخر عند الحذف
مرحبا صديقي، مشكلتي ليست بالحذف، الاكواد جميعها تعمل جيدا لكن دالة تحديث البيانات فب الجريد فيو لا تعمل إلا عند مناداتها عدة مرات، هذه هي مشكلتي.
بالنسبة لـ SelectedRows[0] تعني السطر المحدد من قبل المستخدم لا تعني السطر الاول. فهي ترجع قيمة الخليه 0 في السطر المحدد حتى لو كان السطر رقم 100
بعد تجربة كبيرة من الامس في البداية شككت في الداتا جريد فيو
ولكن بالنهاية اكتشفت انها بريئة وان السبب في قاعدة البيانات ، لسبب ما لا اعلمه يتم تنفيذ الامر ببطء شديد جدا
لذلك عند اضافة عنصر جديد مثلا ، نحن نتوقع ان العنصر تم اضافته فعلا لقاعدة البيانات ، ثم نقوم بطلب الجدول كاملا ولكن التغيرات لا تكون قد حدثت فعلا فيعود بالجدول في الحالة القديمة
لا علاقة لعدد المرات في الموضوع ، لو وضعت زرا يقوم بتحديث الجريد فيو ستكتشف انه يجب الانتظار لبعض الوقت قبل ان تكون التغيرات فعالة
هذه ان صحت طبعا احد كوارث الاكسس
(04-11-20, 03:45 PM)Anas Mahmoud كتب : [ -> ]بعد تجربة كبيرة من الامس في البداية شككت في الداتا جريد فيو
ولكن بالنهاية اكتشفت انها بريئة وان السبب في قاعدة البيانات ، لسبب ما لا اعلمه يتم تنفيذ الامر ببطء شديد جدا
لذلك عند اضافة عنصر جديد مثلا ، نحن نتوقع ان العنصر تم اضافته فعلا لقاعدة البيانات ، ثم نقوم بطلب الجدول كاملا ولكن التغيرات لا تكون قد حدثت فعلا فيعود بالجدول في الحالة القديمة
لا علاقة لعدد المرات في الموضوع ، لو وضعت زرا يقوم بتحديث الجريد فيو ستكتشف انه يجب الانتظار لبعض الوقت قبل ان تكون التغيرات فعالة
هذه ان صحت طبعا احد كوارث الاكسس
شكرا لك صديقي انس، لقد اصابني الجنون من الموضوع و لم اترك طريقه لحل الموضوع، لكن لم اتوقع ان تكون الاعاقة من قاعدة البيانات.
سوف اقوم بتجربة اصدار اقدم او قواعد بيانات اخرى.
شكرا لك
اخي الكريم اتضح انني تسرعت بعض الشيء في الحكم على الامور ، الخطأ فعلا في بطأ الاستجابة للتغيرات ولكن ليست هذه غلطة قاعدة البيانات
الخطأ في الاسلوب نفسه المعتمد على ابقاء الاتصال مفتوحا طوال الوقت ، ما يحدث هو انه كان ينتظر اول 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 الاسلوب ليعتمد على الاتصالت المفتوحة لحظيا فقط وحذفت الاتصال العام وكذلك عدلت باقى الملفات على السريع لتماشي هذا الاسلوب ومشت الامور كما ينبغي ، اعتقد انك ستقوم بتغير الاسلوب المتبع باذن الله
تحياتي
انا اعمل بهذه الطريقة من فتره لكن مع قواعد بيانات sql server ولا اواجة مشاكل بتاتا، مع العلم اني متعمد جعل الاتصال مفتوحا لتسريع العمل و اختصار الجمل الشرطيه لتفقد الاتصال و فتحه واغلاقة. و اقوم باغلاق الاتصال عند الخروج من البرنامج.
شكرا لك صديقي انس ساتفقد طريقتك و اقوم بتطوير طريقتي.