update school set arround2= (SELECT Count(id) from student2 where artak2='دون' )
يظهر الرسالة
Operation must use an updateable query.
يجب أن تحدد اسم حقل العدد فى الاستعلام
جرب هذه الجملة
كود :
update school set arround2= (SELECT Count(id) AS CountOfID from student2 where artak2='دون' )
كود :
cmd.CommandText = " update school set arround2= (SELECT Count(id) as CountOfID from student2 where artak2='دون' ) "
نقس الخطا
Operation must use an updateable query.
ما يدهشتي ان الجملة صحيحة من وجهة نظري يا ريت احد يعرق الخطأ فين ؟؟؟؟؟
لتوضيح اين يقع الخطاء
شوف هنا كده
انت الان تقوم بتطبيق هذا الشكل من الكود كما يلى
كود :
update school set arround2= (SELECT Count(id) as CountOfID from student2 where artak2='دون' )
تحويله منطقياً للهدف المطلوب
كود :
update school set arround2=20
هل تلاحظ ما ينقص الكود هنا
انت حالياً بتطلب من قاعدة البيانات عمل تحديث بجدول school
وهو بطبيعى هيقول حاضر مع السؤال فى اى جزء بهذا الجدول
فجت الجزء خاصة Set اللى بتطلب منه لقيمة arround2
فلما جه يطبق حدث الخطاء انك لم تقم بتعريف arround2 لاى شخص داخل الجدول
وبذلك عليه التطبيق على كل الجدول
لذلك يجب اضافة where
لان من المنطق الكود يكون بهذا الشكل
كود :
update school set arround2=20 where id=1
ليتحول الكود الى طريقة كتابتك
كود :
update school set arround2= (SELECT Count(id) as CountOfID from student2 where artak2='دون' ) where id=???
ولكن الخطاء هنا وارد ان يكون عن القيمة المدخلة
بما انك عامل استعلام لجلب اليمة من الممكن الجول لا يحتوى على id خاصة Count(id)
وبما ان فى خطاء بالجزء ده تسبب فى تعطيل التنفيذ
يارب يكون الشرح مبسط ويوضح ما سبب الخطاء وكيفية التعامل معها دائماً
كل ما عليك هو تغيير جزء
للمعرف الذى يوم بتغيير قيمة arround2 منه
تحياتى لك
وتمنياتى لك التوفيق
السيد الفاضل هو سجل واحد في الجدول school
شرحك جميل لكن هو سجل واحد
المطلوب تحديث الحقل arround بالقيمة التي يقراها من جملة select الثانية
المطلب تحيث كل الحقل في جدول school
تغلبت عليه بالكود لتالي
لكن ما الخطأ في الكود السابق للتعلم وتوفير الوقت
'cmd18.CommandText = " SELECT Count(*) as totalar from student2 where artak2='دون' "
'Conn.Open()
'DR1 = cmd18.ExecuteReader
'DR1.Read()
'cmd.CommandText = " update school set arround2=" & DR1.Item("totalar") & " "
'cmd.ExecuteNonQuery()
'Conn.Close()
(24-05-18, 04:55 PM)atefkhalf2004 كتب : [ -> ]السيد الفاضل هو سجل واحد في الجدول school
شرحك جميل لكن هو سجل واحد
المطلوب تحديث الحقل arround بالقيمة التي يقراها من جملة select الثانية
المطلب تحيث كل الحقل في جدول school
تغلبت عليه بالكود لتالي
لكن ما الخطأ في الكود السابق للتعلم وتوفير الوقت
'cmd18.CommandText = " SELECT Count(*) as totalar from student2 where artak2='دون' "
'Conn.Open()
'DR1 = cmd18.ExecuteReader
'DR1.Read()
'cmd.CommandText = " update school set arround2=" & DR1.Item("totalar") & " "
'cmd.ExecuteNonQuery()
'Conn.Close()
لا يوجد اختلاف بين الكود السابق والكود الحالى
فقط ما قمت به هو عمل كود الاستعلام مستقلاً
من ثم قمت بجلب قيمة الاستعلام للحقل المطلوب تحديث قيمته
فقط قم بتجربة كلاً من الاكواد التالية بدلاً من :
استبدل : بـ
كود :
cmd.CommandText = "update school set arround2=(SELECT Count(id) from student2 where artak2='دون')"
أو ان لم يعمل الكود وظهر خطاء بـ
كود :
cmd.CommandText = "update school set arround2=(SELECT Count(*) from student2 where artak2='دون')"
أو بـ
كود :
cmd.CommandText = "update school set arround2=(SELECT Count(*) as totalar from student2 where artak2='دون')"
تحياتى لك
وتمنياتى لك التوفيق
الاحظ الثلاث جمل واحد لا يوجد اختلاف وجاري التجربة
وان كان نفس الكود
شكرا وجاري
(24-05-18, 05:17 PM)atefkhalf2004 كتب : [ -> ]الاحظ الثلاث جمل واحد لا يوجد اختلاف وجاري التجربة
وان كان نفس الكود
شكرا وجاري
نعم الثلاثة واحد وكلاهمها نفس الناتج
وكل الفرق بينهم جلب الاجمالى عن طريق عمود ID والاخر للجميع
لكن ما اريد ملاحظته اذا ظهر اى رسالة خطاء مع كتابة معينة منهم او لا فقط ليس اكثر
تحياتى لك
وبانتظار ردك
اعتذر اليك أخى الكريم
ففى المشاركة الاولى حاولت التعديل بشكل سريع دون التمعن فى الكود
و لكن بعد اعادة النظر
هذا الاستعلام لن يعطيك ما تريد لماذا؟
لأن الاستعلام الداخلى ستكون نتيجته عبارة عن جدول
و عملية التحديث تحتاج الى قيمة محددة لاستخدامها فى عملية التحديث
لذلك حتى يمكنك اتمام عملية التحديث بشكل صحيح يجب أن تربط الجدولين داخل الاستعلام ثم تحديث كل صف بالقيمة المقابلة
و لكن ماذا لو كان الجدولين غير مرتبطين
فى هذه الحالة سنلجأ الى دالة من دوال الاكسس و هى عبارة عن استعلام و لكن نتيجته قيمة محددة
و هى دالة
DCount
و تطبيقا على ذلك جرب هذا الكود
كود :
UPDATE school SET arround2 = DCount("id","student2"";"artak2='دون'");
السادة الافاضل
السيد الجوكر
الثلاث جمل نفس النتيجة
السيد
[b]mrnooo2000[/b]
الجملة في اكسس وفي الفيجوال اعطت خطأ خط ازرق
تحت
اتمني الحصول علي اجابة
يظهر الرسالة
Operation must use an updateable query.