عبد الفتاح كيرة قام بنشر ديسمبر 20, 2019 قام بنشر ديسمبر 20, 2019 السلام عليكم و رحمة الله هذا كود يتم تنفيذه بعد إغلاق النموذج و هو يعمل بكفاءة و الحمد لله لكن لاحظت أن تحديث الحقول فى الجدول محل التحديث يتأخر أحيانا و يحتاج لإعادة فتح النموذج و غلقه فما سبب ذلك و ما علاجه ننتظر مشورات الإخوة بارك الله فيهم الكود يجمع حقلين و الناتج بحقل ثالث Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb Set rs = db.OpenRecordset("upD") Do While Not rs.EOF If rs.Fields(4) = -1 And rs.Fields(5) = -1 Then rs.Edit rs.Fields(6) = -1 rs.Update ElseIf rs.Fields(4) = -1 And rs.Fields(5) <> -1 Then rs.Edit rs.Fields(6) = Nz(rs.Fields(5), 0) rs.Update ElseIf rs.Fields(5) = -1 And rs.Fields(4) <> -1 Then rs.Edit rs.Fields(6) = Nz(rs.Fields(4), 0) rs.Update Else: rs.Edit rs.Fields(6) = Nz(rs.Fields(4), 0) + Nz(rs.Fields(5), 0) rs.Update End If rs.MoveNext Loop rs.MoveFirst Do While Not rs.EOF If rs.Fields(6) < 50 Then rs.Edit rs.Fields(7) = 1 rs.Update Else rs.Edit rs.Fields(7) = 0 rs.Update End If rs.MoveNext Loop rs.MoveFirst rs.MoveLast rs.Close db.Close Set rs = Nothing Set db = Nothing جزاكم الله خيرا و نلقاكم بعد الصلاة بإذن الله
jjafferr قام بنشر ديسمبر 20, 2019 قام بنشر ديسمبر 20, 2019 وعليكم السلام 🙂 يمكنك حذف هذين السطرين في آخر الكود : rs.MoveFirst rs.MoveLast . منذ ساعه, عبد الفتاح كيرة said: هذا كود يتم تنفيذه بعد إغلاق النموذج انت تقوم بتحديث جميع سجلات الجدول ، كلما تغلق النموذج ، ليش !! الطريقة الصحيحة هي تحديث جميع سجلات الجدول اول مرة بطريقتك ، ثم لاحقا تضع كود لكي يحدث السجل الذي انت عليه. السؤال الآخر ، ليش ما تعمل استعلام تحديث ، وتضع اوامر الـ IF في وحدة نمطية ، بيكون اسرع 🙂 جعفر
عبد الفتاح كيرة قام بنشر ديسمبر 20, 2019 الكاتب قام بنشر ديسمبر 20, 2019 منذ ساعه, jjafferr said: الطريقة الصحيحة هي تحديث جميع سجلات الجدول اول مرة بطريقتك ، ثم لاحقا تضع كود لكي يحدث السجل الذي انت عليه. ما معنى لاحقا تقصد عند إدخال الدرجة فى النموذج يعنى فى حدث بعد التحديث للحقل؟ منذ ساعه, jjafferr said: ليش ما تعمل استعلام تحديث ، وتضع اوامر الـ IF في وحدة نمطية ، بيكون اسرع 🙂 لماذا؟ هل هذه الطريقة معيبة أو غير مضمونة وقد لاحظت أنها سريعة سؤال هل لو عملنا requery للنموذج قبل الخروج يضمن تحديث الجدول؟ منذ ساعه, jjafferr said: مكنك حذف هذين السطرين في آخر الكود : نعم أضفتهما لمحاولة تنشيط مصدر السجلات نسيت أن أذكر أن مصدر السجلات ليس هو الجدول بل استعلام قائم على الجدول منذ ساعه, jjafferr said: انت تقوم بتحديث جميع سجلات الجدول ، كلما تغلق النموذج ، ليش !! لأنه يتم تعديل درجات حقل واحد فى النموذج يدويا بإدخال درجة الطالب و التحديث الجمعى لجمع هذا الحقل مع حقلين آخرين بالجدول والناتجة بحقل ثالث والحقل الرابع يوضع فيه واحد للراسب فى المادة و 0 للناجح فيها
jjafferr قام بنشر ديسمبر 20, 2019 قام بنشر ديسمبر 20, 2019 55 دقائق مضت, عبد الفتاح كيرة said: ما معنى لاحقا تقصد عند إدخال الدرجة فى النموذج يعنى فى حدث بعد التحديث للحقل؟ نعم ، حدث تحديث الحقل للسجل الذي يعمل عليه فقط ، 56 دقائق مضت, عبد الفتاح كيرة said: لماذا؟ هل هذه الطريقة معيبة أو غير مضمونة وقد لاحظت أنها سريعة الاستعلام اسرع ، 57 دقائق مضت, عبد الفتاح كيرة said: سؤال هل لو عملنا requery للنموذج قبل الخروج يضمن تحديث الجدول؟ لا علاقة بالنموذج في ادخال/تحديث البيانات ، فانت في الكود لا تشير الى اي شيء في النموذج ، وانما عملك مباشرة مع الجدول/الاستعلام ، نعم ، Requery ، سيجعل النموذج يأخذ احدث بيانات الجدول ، ويقوم بأي عمليات حسابية اخرى وقت فتح النموذج ، وإلا ، فلا فائدة منه ، 58 دقائق مضت, عبد الفتاح كيرة said: نعم أضفتهما لمحاولة تنشيط مصدر السجلات الذهاب الى آخر سجل ثم العودة لأول سجل ، هو فقط لكود Recordset وليس للنموذج ، منذ ساعه, عبد الفتاح كيرة said: نسيت أن أذكر أن مصدر السجلات ليس هو الجدول بل استعلام قائم على الجدول مافي فرق بين الجدول والاستعلام ، منذ ساعه, عبد الفتاح كيرة said: لأنه يتم تعديل درجات حقل واحد فى النموذج يدويا بإدخال درجة الطالب و التحديث الجمعى لجمع هذا الحقل مع حقلين آخرين بالجدول والناتجة بحقل ثالث والحقل الرابع يوضع فيه واحد للراسب فى المادة و 0 للناجح فيها ولكن هذا كله له علاقة في السجل نفسه فقط ، فيجب ان نحدث هذه الحقول في هذا السجل ، ولن يأخذ حدث التحديث هذا اكثر من جزء من الثانية لتحديث هذه الحقول الاربعة ، ثم السؤال الآخر هو ، لماذا Loop مرتين ، فيمكنك دمجهما في Loop واحد 🙂 جعفر 1
عبد الفتاح كيرة قام بنشر ديسمبر 20, 2019 الكاتب قام بنشر ديسمبر 20, 2019 شكرا جزيلا لك لعنايتك بالرد قررت الجمع بين تحديث كل سجل وقت الإدخال والتحديث الجماعى بعد الإغلاق تفاديا لأى خطأ ما رأيك؟
jjafferr قام بنشر ديسمبر 20, 2019 قام بنشر ديسمبر 20, 2019 لا طبعا ، لا اتفق معاك 🙂 يا اعمل الشغل صح ، ويا اسهر الليل واخليه يشتغل صح 🙂 لوسمحت ، وقبل ان ترفض رأيي ، انزل القاعدة التالية https://www.officena.net/ib/applications/core/interface/file/attachment.php?id=102103 واعمل اي تغيير مثل طلبك ، وجرب طلبك 🙂 قاعدة البيانات اعلاه تحتوي على 189,450 سجل (يعني بعد حوالي 5 سنوات قد تصل عدد سجلاتك الى هذا العدد) ، وشوف الوقت اللي يأخذه البرنامج منك لتنفيذ Loops اعلاه ، يا اخي ، ولا يهمك ، بعد ان تحسب الوقت اعلاه ، احذف نصف السجلات اعلاه ، واحسب الوقت ، طيب ولا تزعل ، الزبون ما بتوصل سجلاته الى 100000 بعد 5 سنوات ، كذلك احذف النصف وجرب على 50000 سجل 🙂 قصدي من هذا المثال ، انه لا يمكن لزبون ان يقبل هذا التأخير في برنامجه ، وبعد كل اغلاق !! جعفر 1
عبد الفتاح كيرة قام بنشر ديسمبر 20, 2019 الكاتب قام بنشر ديسمبر 20, 2019 تمام سأكتفى بتحديث السجل فقط مع أن ملفنا لا يزيد عن 211 سجلا هى عدد طلاب الصف شكرا لك أستاذ جعفر بارك الله فيك
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.