اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

ضمان التحديث السريع لحقول جدول بعد تنفيذ كود DAO


الردود الموصى بها

السلام عليكم و رحمة الله

هذا كود يتم تنفيذه بعد إغلاق النموذج

و هو يعمل بكفاءة و الحمد لله

لكن لاحظت أن تحديث الحقول فى الجدول محل التحديث يتأخر أحيانا و يحتاج لإعادة فتح النموذج و غلقه

فما سبب ذلك و ما علاجه

ننتظر مشورات الإخوة بارك الله فيهم

الكود يجمع حقلين و الناتج بحقل ثالث

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

جزاكم الله خيرا و نلقاكم بعد الصلاة بإذن الله

رابط هذا التعليق
شارك

وعليكم السلام 🙂

 

يمكنك حذف هذين السطرين في آخر الكود :

    rs.MoveFirst
    rs.MoveLast

.

منذ ساعه, عبد الفتاح كيرة said:

هذا كود يتم تنفيذه بعد إغلاق النموذج

انت تقوم بتحديث جميع سجلات الجدول ، كلما تغلق النموذج ، ليش !!

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

 

السؤال الآخر ، ليش ما تعمل استعلام تحديث ، وتضع اوامر الـ IF في وحدة نمطية ، بيكون اسرع 🙂

 

جعفر

رابط هذا التعليق
شارك

منذ ساعه, jjafferr said:

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

ما معنى لاحقا

تقصد عند إدخال الدرجة فى النموذج يعنى فى حدث بعد التحديث للحقل؟

منذ ساعه, jjafferr said:

ليش ما تعمل استعلام تحديث ، وتضع اوامر الـ IF في وحدة نمطية ، بيكون اسرع 🙂

 

لماذا؟

هل هذه الطريقة معيبة أو غير مضمونة 

وقد لاحظت أنها سريعة

سؤال

هل لو عملنا requery للنموذج قبل الخروج يضمن تحديث الجدول؟

منذ ساعه, jjafferr said:

مكنك حذف هذين السطرين في آخر الكود :

نعم 

أضفتهما لمحاولة تنشيط مصدر السجلات

نسيت أن أذكر أن مصدر السجلات ليس هو الجدول

بل استعلام قائم على الجدول

منذ ساعه, jjafferr said:

انت تقوم بتحديث جميع سجلات الجدول ، كلما تغلق النموذج ، ليش !!

لأنه يتم تعديل درجات حقل واحد فى النموذج يدويا بإدخال درجة الطالب و التحديث الجمعى لجمع هذا الحقل مع حقلين آخرين بالجدول والناتجة بحقل ثالث

والحقل الرابع يوضع فيه واحد للراسب فى المادة و 0 للناجح فيها

 

رابط هذا التعليق
شارك

55 دقائق مضت, عبد الفتاح كيرة said:

ما معنى لاحقا

تقصد عند إدخال الدرجة فى النموذج يعنى فى حدث بعد التحديث للحقل؟

نعم ، حدث تحديث الحقل للسجل الذي يعمل عليه فقط ،

 

56 دقائق مضت, عبد الفتاح كيرة said:

لماذا؟

هل هذه الطريقة معيبة أو غير مضمونة 

وقد لاحظت أنها سريعة

الاستعلام اسرع ،

 

57 دقائق مضت, عبد الفتاح كيرة said:

سؤال

هل لو عملنا requery للنموذج قبل الخروج يضمن تحديث الجدول؟

لا علاقة بالنموذج في ادخال/تحديث البيانات ، فانت في الكود لا تشير الى اي شيء في النموذج ، وانما عملك مباشرة مع الجدول/الاستعلام ،

نعم ، Requery ، سيجعل النموذج يأخذ احدث بيانات الجدول ، ويقوم بأي عمليات حسابية اخرى وقت فتح النموذج ، وإلا ، فلا فائدة منه ،

 

58 دقائق مضت, عبد الفتاح كيرة said:

نعم 

أضفتهما لمحاولة تنشيط مصدر السجلات

الذهاب الى آخر سجل ثم العودة لأول سجل ، هو فقط لكود Recordset وليس للنموذج ،

 

منذ ساعه, عبد الفتاح كيرة said:

نسيت أن أذكر أن مصدر السجلات ليس هو الجدول

بل استعلام قائم على الجدول

مافي فرق بين الجدول والاستعلام ،

 

منذ ساعه, عبد الفتاح كيرة said:

لأنه يتم تعديل درجات حقل واحد فى النموذج يدويا بإدخال درجة الطالب و التحديث الجمعى لجمع هذا الحقل مع حقلين آخرين بالجدول والناتجة بحقل ثالث

والحقل الرابع يوضع فيه واحد للراسب فى المادة و 0 للناجح فيها

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



ثم السؤال الآخر هو ، لماذا Loop مرتين ، فيمكنك دمجهما في Loop واحد 🙂

جعفر

  • Thanks 1
رابط هذا التعليق
شارك

شكرا جزيلا لك لعنايتك بالرد

قررت الجمع بين

تحديث كل سجل وقت الإدخال

والتحديث الجماعى بعد الإغلاق

تفاديا لأى خطأ

ما رأيك؟

رابط هذا التعليق
شارك

لا طبعا ، لا اتفق معاك 🙂

يا اعمل الشغل صح ، ويا اسهر الليل واخليه يشتغل صح 🙂

 

لوسمحت ، وقبل ان ترفض رأيي ، انزل القاعدة التالية https://www.officena.net/ib/applications/core/interface/file/attachment.php?id=102103

واعمل اي تغيير مثل طلبك ، وجرب طلبك 🙂

 

قاعدة البيانات اعلاه تحتوي على 189,450 سجل (يعني بعد حوالي 5 سنوات قد تصل عدد سجلاتك الى هذا العدد) ، وشوف الوقت اللي يأخذه البرنامج منك لتنفيذ Loops اعلاه ،

يا اخي ، ولا يهمك ، بعد ان تحسب الوقت اعلاه ، احذف نصف السجلات اعلاه ، واحسب الوقت ،

طيب ولا تزعل ، الزبون ما بتوصل سجلاته الى 100000 بعد 5 سنوات ، كذلك احذف النصف وجرب على 50000 سجل 🙂

 

قصدي من هذا المثال ، انه لا يمكن لزبون ان يقبل هذا التأخير في برنامجه ، وبعد كل اغلاق !!

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information