اذهب الي المحتوي
أوفيسنا

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

قام بنشر

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

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

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

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

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

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

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information