![]() |
|
مشكلة في تعديل سجل في قاعدة بيانات اكسيس - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176) +--- الموضوع : مشكلة في تعديل سجل في قاعدة بيانات اكسيس (/showthread.php?tid=31640) |
مشكلة في تعديل سجل في قاعدة بيانات اكسيس - asemshahen5 - 04-10-19 عندي مشكلة في تعديل سجل في قاعدة بيانات اكسيس مع استخدام نفس الكود على قاعدة بيانات Sql Server يقوم بالضافة و التعديل دون مشاكل اما في قاعدة البينات اكسيس يضيف سجل جديد دون اي مشكلة لكن عند التعديل لا يقوم بالتعديل يظل السجل كما هو دون ان يعطي اي رسالة خطأ او اي مشكل فقط يظل السجل كما هو لا يقوم بالتعديل على السجل . المثال بالمرفقات عبارة عن اضافة و تعديل على الداتا غريد فيو . RE: مشكلة في تعديل سجل في قاعدة بيانات اكسيس - kiki - 04-10-19 تفضل التعديل بالمرفق مع بعض اللمسات السريعة على الملف RE: مشكلة في تعديل سجل في قاعدة بيانات اكسيس - asemshahen5 - 04-10-19 عندي سؤال أين كانت المشكلة بالضبط لاني فحصت الاستعلام المتولد و كان صحيح و فحصت الباراميترات و كانت صحيحة و لم اعرف لماذا لم يكن ينفذ الحفظ . RE: مشكلة في تعديل سجل في قاعدة بيانات اكسيس - kiki - 06-10-19 حتى توضح لك الامر اكثر اين تقع المشكلة افتح المشروع الخاص بك ببداية الموضوع وتعال عن عمود الملاحظات وضع رقم الصف والمقصود بها الـ ID يعنى فى البيانات الاول ضع رقم 1 وتعال على صف الـ Test واكتب رقم 2 وستوضح لك الخطاء فين بضبط الامر هو ان عملية Where id=noteX وليس id=id لهذا كلما ادخلت بيانات يكون كود التعديل عبارة عن id="" أو نص RE: مشكلة في تعديل سجل في قاعدة بيانات اكسيس - asemshahen5 - 06-10-19 لقد عملت لوب لاستخلاص الباراميترات و القيم الخاصة بها و وضعت الاستعلام في مسج بوكس مع البراميترات في المثال قبل تعديلك انظر الى الصور : [attachment=23116] انظر الى المسج بوكس : [attachment=23115] هذه الصور من المثال قبل التعديل هذا ماجعلني اسال عن سبب عدم الحفظ . RE: مشكلة في تعديل سجل في قاعدة بيانات اكسيس - kiki - 06-10-19 تعال كده عند NoteX الخاص بـ Asem واكتب به رقم 1 ستشاهد ماذا سيحدث معك او بالصف الذى ياليه واكتب رقم 2 السبب سيكون كالتالى ما لاحظته مسبقاً بملفك على السريع وهو وجود عمود ID فى الاضافة والتعديل حيث القيمة يتم تحريرها فى الاضافة والتعديل طبعاً عند فى الملف لديك هذا العمود لا يمكن التعديل عليه من قبل المستخدم ولكن فى الكود يقوم باخذ قيمته وتحريره بقاعدة البيانات بحيث عند الاضافة بيكون الادخال فارغ فهنا ياتى دور الترقيم التلقائي فلا يحدث مشكلة عند الاضافة ولكن عند التعديل ياتى دور بان الـ ID قيمته كذا فى التحرير عند الجزء SET ومن ثم ياتي دورها عند WHERE واعتقد اذا تم النظر فى عملية كود For لجعله يبداء من 1 بدلاً من 0 ليتجنب ID فى الاضافة والتعديل ويكتفي تعريفة فى سطر SaveColumnValueXT واخذ الاسم والقيمة منه كون اسم العمود كذا المدخل من قبل المستخدم كما انت فعلته فى string IDCol وترتيبه وهو ما انت قمت بفعله Int32 IDColIndex يفضل تغيير Int32 الى Int بكده عند عمل حلقة For ستقوم بعمل تعريف لكلقمة الاعمدة خاصة البارامترات وثم خارج الحلقة ستضع بارامتر الخاص بـ ID مستقلاً جرب الامر مع ترتيب الاكواد وتقليله وستنجح معك فمثلاً لديك كود مثل كود : for (int i = 0; i < ArrCol.Count; i++)يمكنه ان يكون بهذا الشكل كود : for (int i = 0; i < ArrCol.Count; i++) // 0000وكذلك الاسطر مثل هذا كود : SqlStr += " WHERE " + IDCol + "=@" + IDCol + "" + "";يكتفى ان يكون بهذا الشكل كود : SqlStr += " WHERE " + IDCol + "=@" + IDCol;وايضاً اسطر التحقق كود : OleDBCmd.Parameters.AddWithValue("@" + ArrCol[i].ToString(), DGV_Normal.Rows[RowIndex].Cells[i].Value == null ? "" : dgvRow.Cells[i].Value.ToString());لا اعلم لماذا تضع شرط تحقق بهذا السطر بينماً جملة ToString تكفى بهذه الاغراض ليكون السطر بهذا الشكل كود : OleDBCmd.Parameters.AddWithValue("@" + ArrCol[i].ToString(), dgvRow.Cells[i].Value.ToString());لانه اذا كان فارغ سيكون بطبيعة الحال فارغ فانت لست بحاجة ان تقول اذا كان فارغ اجعله فارغ لان ToString هى ما تقوم بذلك ممكن ايضاً تقول ايه وظايف كل تلك الاسطر والتحقق بهذا الكود كود : if (SqlStr.Contains("UPDATE"))لان هذا الجزء لا قيمة له ووجوده مثل عدمه كود : if (IdentityIncrement == true)لان السطر اللى هو كود : OleDBCmd.Parameters.AddWithValue("@" + ArrCol[i].ToString(), DGV_Normal.Rows[RowIndex].Cells[i].Value == null ? "" : dgvRow.Cells[i].Value.ToString());بعد تعديله يجب ان يكون بهذا الشكل كود : OleDBCmd.Parameters.AddWithValue("@" + ArrCol[i].ToString(), dgvRow.Cells[i].Value.ToString());هيكفي لاعطاء قيم كل البارامترات اذا كان ID أو غيرها فلا يحدث اى مشكلة جرب تضع هذا الكود مكانه وستجد النتيجة واحدة كود : if (SqlStr.Contains("UPDATE"))بالنهاية ونصيحة مهمة جداً يجب الانتباه اليها وهو هذا السطر كود : if (Con.State == ConnectionState.Open)و كود : OleDBCmd.ExecuteNonQuery();مش من الصح التحقق اذا كان الاتصال مفتوع تقوم باغلاقه ومن ثم فتحه ثم تنفيذ التحديث الصح ان يكون كل من هذه الاسطر بهذا الشكل كود : if (Con.State == ConnectionState.Closed)لاحظ فتح واغلاق قبل وبعد تنفيذ مباشر لان هذا سيساعد اذا كان اكثر مش شخص يستخدم الاتصال بقاعدة بيانات الـ Access لان سيجعل الاتصال بقاعدة البيانات دائماً مغلقة دائماً ما نلاحظ وجود ايقومة من قاعدة البيانات بجانب الايقومة الرئيسية لملف قاعدة البيانات وبيكون سببها هو كود الاتصال بفتح الاتصال بدون اغلاق ليبقي هذه الايقونة موجوده حتى يتم اغلاق الاتصال اتمنى بالنهاية اكون ولو بقدر ما استطاع وضحت كل شى بخصوص الخطاء وما فى الملف لديك واسف على كثرة النقاش |