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

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

قام بنشر
1 دقيقه مضت, Moosak said:

بس زين لو تشرح الفكرة 🙂

 

في هذا التعديل ، قمت بتحديث القيمة في النموذج مباشرةً بدلاً من عرضها في رسالة ، باستخدام السطر :-
 

Me.FieldChangedFrom = rs.Fields(1).Value

بدلاً من السطرين السابقين :-

 Beep
 MsgBox rs.Fields(1)

لتحديث القيمة في النموذج مباشرةً بالقيمة الموجودة في السجل الحالي.

 

وأما بالنسبة للجزئية المتعلقة بالحدث عند فتح النموذج المتعقب للتغييرات فهي فقط لتحديث الحقل ، فبدونها سيتوجب على المستخدم ان يقف على مربع النص FieldChangedFrom ليتم تطبيق التحديث ، كون الحدث يعمل في الحالي . فاستبدلت الفكرة لفتح النموذج والذهاب الى آخر سجل وعمل تحديث له .

DoCmd.GoToRecord , , acLast
[Forms]![frmAudit]![FieldChangedFrom].SetFocus
[Forms]![frmAudit]![FieldChangedFrom].Requery

 

 

قام بنشر
منذ ساعه, Moosak said:

توقعتك تسأل .. 😄🖐🏻️ .. هذه واحدة من الطرق الجميلة لتطبيق دالة معينة على مجموعة من العناصر مرة واحدة ..
قمت بتحديد جميع العناصر ثم كتبت اسم الدالة في حدث بعد التحديث هكذا ( ()AddToAudit= ) وهذه الطريقة أسهل من كتابة الحدث لكل عنصر على حده .. 🙂 

ولها شروط سأذكرها لك ..

image.png.810428f3c252179012a39a3e6324d956.png

 

أما بالنسبة للقائمة المنسدلة وضعت لها دالة منفصلة وذلك لحفظ القيمة الحالية في متغير عام قبل التغيير عند حدث ( عند التركيز ) ..
ولو كانت عندك أكثر من قائمة منسدلة حددها جميعا وألصق اسم الدالة لها جميعا مرة واحدة ..

image.png.96a968380903c286bc8e058834b0261c.png

من شروط استخدام هذه الطريقة :

1- أن يكون الكود (الإجرائية) من نوع Function وليس Sub .
2- أن لا يكون لنفس العنصر أي أكواد أخرى في نفس الحدث ..
    وفي حال الحاجة لوضع أكواد أخرى في نفس الحدث يتم العودة للطريقة الإعتيادية لكتابة الكود ويتم مناداة الدالة بالطريقة المعتادة

Call AddToAudit()

 

نعم اعرف  الطريقة .. ولكني لم انظر  حدث الحقل في الخصائص

شرحك هذا جميل لكل من يمر من هنا ويقرأ موضوعنا هذا 

كل شيء تفحصته الا خصائص الحقول .. لأن المستقر في بالي احداث النموذج جملة

طريقتك الحدث حسب الحقل .. حقل حقل حيث يتم الرصد عند كل تغيير في الحقل

بينما طريقتي السابقة رصد التغييرات جملة عند تحديث النموذج

 

  • Like 1
قام بنشر
منذ ساعه, Foksh said:

 

وهذه مشاركتي بطريقة أخرى :jump:

تم إجراء تعديلات على الكود الذي يظهر النتيجة برسالة عند النقر المزدوج على الحقل FieldChangedFrom . واستخدامه في حدث ( في الحالي ) للنموذج FrmAudit ، على النحو التالي :-

 

 

 

مبدع .. هكذا الأفكار الشبابية  .. جزاك الله خيرا

  • Thanks 1
قام بنشر
9 ساعات مضت, ابوخليل said:

طريقتك الحدث حسب الحقل .. حقل حقل حيث يتم الرصد عند كل تغيير في الحقل

هذه الطريقة تتيح لك الحرية في اتخاذ إجراءات خاصة لحقول معينة بدل التطبيق على الجميع جملة واحدة ..
وهنا استفدنا منها في عملية تخزين قيمة القائمة المنسدلة في المتغير قبل التغيير .

 

9 ساعات مضت, ابوخليل said:

بينما طريقتي السابقة رصد التغييرات جملة عند تحديث النموذج

وكانت هذه الطريقة ستختصر تعقيد كثرة الإجراءات لولا مشكلة القائمة المنسدلة هذه 😄

قام بنشر (معدل)
في 11‏/2‏/2024 at 09:06, ابوخليل said:

السلام عليكم

هذا الجزء في التصميم تم التطرق اليه في هذا المنتدى ومن يبحث يجد الكثير .. علما اني قد استفدت واخذت من تلك المواضيع فما انا الا  ناقل .. والعلم  تراكمي ينتقل ويتزايد .

وحتى يكون هذا الموضوع مرجع مختصر  يتم نقله فقط الى برنامجك ..  لذا عملت على اعداد مثال صغير وهو عبارة عن جدول ونموذج ووحدة نمطية

ويتم من خلاله رصد التالي :

- معرف السجل

- اسم الحقل

- اسم النموذج

- القيمة الأساسية ( قبل التعديل )

- القيمة الجديدة (بعد التعديل )

- اسم المستخدم

- تاريخ ووقت التعديل 

مع امكانية التصفية والبحث بين تاريخين

--------------------------------------------------------------

كل ما عليك عمله هو :

اولا :

نقل الكائنات التالية (جدول/نموذج/وحدة نمطية) الى برنامجك : modAudit / frmAudit  / tblAudit

ثانيا :

اي نموذج في مشروعك ترغب في تتبع التعديلات التي تجري عليه .. فقط الصق فيه هذا الكود في حدث قبل التحديث

 

Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim x As Integer
        If Not IsNull(Me!ID) Then
        x = WriteAudit(Me, Me!ID)
    End If
End Sub

ID  يمثل الحقل الفريد داخل النموذج

 

هذا كل شيء ...

----------------------------------------------------------------------------------------------------------------------------------------

نأتي للتفاصيل التي استبعدتها وهي محل النقاش لمن اراد المشاركة  .

وهي ان الوظيفة تخص تتبع الحقول النصية فقط ، واريد ضم مربع التحرير

وكما هو ظاهر في المثال المرفق .. قيمة مربع التحرير "رقمية" والمطلوب اظهار القيمة "النصية" الأساسية ( التي تم تغييرها) ، اظهارها في جدول التتبع

اما بالنسبة للقيمة الجديدة فلا اشكال فيها 

انا عالجت المسألة ووصلت الى حل ولكن بطريقة مطولة

فنريد الاستفادة من الخبراء الأفاضل حول هذه النقطة

و لأخي @Moosak  خاصه تعقيبا على تعليقه هنا 

------------------------------------------------------------------------------------

وقد اجاب الاستاذ موسى والاستاذ فادي وأجادا  بمثالين احترافيين شاملين  فجزاهما الله خيرا

1- المرفق Database2 وهو خاص بالحقول النصية

2- المرفق  Track Changes - Moosak  شامل الحقول النصية ومربعات التحرير

3- المرفق Database5 شامل الحقول النصية ومربعات التحرير

بقي الاختيار لك فاختر ما يناسبك .

 

Track Changes - Moosak.accdb 576 kB · 8 downloads

Database2.rar 38.65 kB · 2 downloads

Database5.accdb 1.22 \u0645\u064a\u062c\u0627 \u0628\u0627\u064a\u062a · 5 downloads

المبدع الفاضل برنامج اكثر من رائع

شكرا

تم تعديل بواسطه jo_2010
قام بنشر (معدل)
في 11‏/2‏/2024 at 09:06, ابوخليل said:

السلام عليكم

هذا الجزء في التصميم تم التطرق اليه في هذا المنتدى ومن يبحث يجد الكثير .. علما اني قد استفدت واخذت من تلك المواضيع فما انا الا  ناقل .. والعلم  تراكمي ينتقل ويتزايد .

وحتى يكون هذا الموضوع مرجع مختصر  يتم نقله فقط الى برنامجك ..  لذا عملت على اعداد مثال صغير وهو عبارة عن جدول ونموذج ووحدة نمطية

ويتم من خلاله رصد التالي :

- معرف السجل

- اسم الحقل

- اسم النموذج

- القيمة الأساسية ( قبل التعديل )

- القيمة الجديدة (بعد التعديل )

- اسم المستخدم

- تاريخ ووقت التعديل 

مع امكانية التصفية والبحث بين تاريخين

--------------------------------------------------------------

كل ما عليك عمله هو :

اولا :

نقل الكائنات التالية (جدول/نموذج/وحدة نمطية) الى برنامجك : modAudit / frmAudit  / tblAudit

ثانيا :

اي نموذج في مشروعك ترغب في تتبع التعديلات التي تجري عليه .. فقط الصق فيه هذا الكود في حدث قبل التحديث

 

Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim x As Integer
        If Not IsNull(Me!ID) Then
        x = WriteAudit(Me, Me!ID)
    End If
End Sub

ID  يمثل الحقل الفريد داخل النموذج

 

هذا كل شيء ...

----------------------------------------------------------------------------------------------------------------------------------------

نأتي للتفاصيل التي استبعدتها وهي محل النقاش لمن اراد المشاركة  .

وهي ان الوظيفة تخص تتبع الحقول النصية فقط ، واريد ضم مربع التحرير

وكما هو ظاهر في المثال المرفق .. قيمة مربع التحرير "رقمية" والمطلوب اظهار القيمة "النصية" الأساسية ( التي تم تغييرها) ، اظهارها في جدول التتبع

اما بالنسبة للقيمة الجديدة فلا اشكال فيها 

انا عالجت المسألة ووصلت الى حل ولكن بطريقة مطولة

فنريد الاستفادة من الخبراء الأفاضل حول هذه النقطة

و لأخي @Moosak  خاصه تعقيبا على تعليقه هنا 

------------------------------------------------------------------------------------

وقد اجاب الاستاذ موسى والاستاذ فادي وأجادا  بمثالين احترافيين شاملين  فجزاهما الله خيرا

1- المرفق Database2 وهو خاص بالحقول النصية

2- المرفق  Track Changes - Moosak  شامل الحقول النصية ومربعات التحرير

3- المرفق Database5 شامل الحقول النصية ومربعات التحرير

بقي الاختيار لك فاختر ما يناسبك .

 

Track Changes - Moosak.accdb 576 kB · 14 downloads

Database2.rar 38.65 kB · 2 downloads

Database5.accdb 1.22 \u0645\u064a\u062c\u0627 \u0628\u0627\u064a\u062a · 7 downloads

شكرا لابداعك هل من الممكن  جعل البرنامج يتجاهل السجلات الجديدة ويقوم فقط بترقب التعديل على السجلات القديمة 

ايضا فى حالة حذف سجل ماذا نفعل وكيف نكتشف السجل المحذوف ومن حدفة شكرا لك

 

تم تعديل بواسطه jo_2010
قام بنشر
منذ ساعه, jo_2010 said:

شكرا لابداعك هل من الممكن  جعل البرنامج يتجاهل السجلات الجديدة ويقوم فقط بترقب التعديل على السجلات القديمة 

اعتقد نعم ممكن

منذ ساعه, jo_2010 said:

ايضا فى حالة حذف سجل ماذا نفعل وكيف نكتشف السجل المحذوف ومن حدفة شكرا لك

 

هنا اختلف الأمر  فالسجلات في الجداول تختلف من جدول الى آخر .. والجداول كثيرة  .. ونحتاج هنا الى نسخ طبق الاصل من الجداول كلها كي نحفظ صورة من السجل المحذوف من كل جدول 

وهذا الشيء فيه زحمة كما ترى

ولكن ستكون الفكرة مقبولة اذا الذي تتم مراقبته هو جدول واحد محل اهتمام العميل.. 

ونخلص من هذا ان المطلوب بعيد عن فكرة مراقبة التعديل ...  والتي ترصد حقلا واحدا فقط

---------------------

لنفرض انك قلت اريد فقط معرف السجل المحذوف وحقلا واحدا اختاره واسم الجدول ... ولا يلزم نسخ كامل السجل واريد ادخاله ضمن الدالة

وجوابي  اني لا اعلم  ويحتاج هذا الأمر الى محاولة وتجربة وتعاون من الاخوة الخبراء

 

 

قام بنشر
47 دقائق مضت, ابوخليل said:

اعتقد نعم ممكن

هنا اختلف الأمر  فالسجلات في الجداول تختلف من جدول الى آخر .. والجداول كثيرة  .. ونحتاج هنا الى نسخ طبق الاصل من الجداول كلها كي نحفظ صورة من السجل المحذوف من كل جدول 

وهذا الشيء فيه زحمة كما ترى

ولكن ستكون الفكرة مقبولة اذا الذي تتم مراقبته هو جدول واحد محل اهتمام العميل.. 

ونخلص من هذا ان المطلوب بعيد عن فكرة مراقبة التعديل ...  والتي ترصد حقلا واحدا فقط

---------------------

لنفرض انك قلت اريد فقط معرف السجل المحذوف وحقلا واحدا اختاره واسم الجدول ... ولا يلزم نسخ كامل السجل واريد ادخاله ضمن الدالة

وجوابي  اني لا اعلم  ويحتاج هذا الأمر الى محاولة وتجربة وتعاون من الاخوة الخبراء

 

 

شكرا للاهتمام ممكن نركز على الجزء الاول وهو الاحتفاظ بالتعديل على السجلات القديمة فقط ونتجاهل السجلات الجديد

قام بنشر
3 ساعات مضت, jo_2010 said:

شكرا للاهتمام ممكن نركز على الجزء الاول وهو الاحتفاظ بالتعديل على السجلات القديمة فقط ونتجاهل السجلات الجديد

استبدل الكود الموجود في نموذج التعديل بهذا

Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not Me.NewRecord Then
Dim x As Integer
        If Not IsNull(Me!ID) Then
        x = WriteAudit(Me, Me!ID)
    End If
End If
End Sub

 

قام بنشر
5 ساعات مضت, ابوخليل said:

يحتاج هذا الأمر الى محاولة وتجربة وتعاون من الاخوة الخبراء

- تسجيل من أضاف السجل .
- تسجيل من حذف السجل .
- إمكانية التطبيق لجميع النماذج ..

هذه ممكنة والله أعلم .. ولكن ستكون لها إجراءات إضافية وتعديلات في جدول التغيرات . 🙂 

قام بنشر

تسجيل من أضاف السجل ، قد ابديت وجهة نظري في مشاركة سابقة

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

لذا ارى ان عملية ضبط المحذوفات تختلف تماما عن تتبع التغيير

والافضل ان تكون عملية مراقبة الحذف هي عبارة عن نقل السجل من مكان الى آخر .. مع تفعيل خاصية الاسترداد او الحذف النهائي

قام بنشر (معدل)
15 ساعات مضت, ابوخليل said:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not Me.NewRecord Then
Dim x As Integer
        If Not IsNull(Me!ID) Then
        x = WriteAudit(Me, Me!ID)
    End If
End If
End Sub

حدثت اخطاء بعد اضافة الكود الجديد اليك القاعدة للتعديل

ccc.rar

تم تعديل بواسطه jo_2010
قام بنشر

السلام عليكم / استاذي الفاضل ابو خليل المحترم
يعلم جنابكم الكريم بان معظم العمل يتم بالنموذج الرئيسي الفرعي / السؤال :

يظهر في نموذج التغيرات حقل  ID بشكل ثابت هل بالامكان ان يظهر الى جانبه بشكل ثابت ايضا اسم المشتري , وليس في حقل (اسم الحقل)  . واذا كان ذلك غير ممكن كيف استطيع الحصول على اسم المشتري ( س)  الذي هو في النموذج الرئيس و من النموذج الفرعي احصل على اسم السلعه التي تم تغيير سعرها والتي تعود لذات المشتري المذكور(س) تحياتي  

التغيرات.rar

قام بنشر

الله ينور دربك استاذ ابوخليل . ويجعل ذلك في ميزان حسناتك.  كل كلمات الشكر والعرفات لاتفيك حقك .

لا اضيف شيء لان كلشيء تمام زي العسل  لكن عندما اطلعت على نموذج التغيرات  توقعت لم يحصل شيء  وعند اطلاعي على الجدول وجدت كل ما اتمناه ويبدو انك لم تنزل الحقل BuyerName في النموذج لكثرة مشاغلك . ارجو اعادة تنزيل القاعده ليستفاد منها غيري لاني لم انزلها لكي لايعتقد غيري بان لي دور في صياغتها الجميله ولكي يبقى الفضل لك . اكرر شكري وتقديري

قام بنشر
1 ساعه مضت, بونس الخطابي said:

الله ينور دربك استاذ ابوخليل . ويجعل ذلك في ميزان حسناتك.  كل كلمات الشكر والعرفات لاتفيك حقك .

لا اضيف شيء لان كلشيء تمام زي العسل  لكن عندما اطلعت على نموذج التغيرات  توقعت لم يحصل شيء  وعند اطلاعي على الجدول وجدت كل ما اتمناه ويبدو انك لم تنزل الحقل BuyerName في النموذج لكثرة مشاغلك . ارجو اعادة تنزيل القاعده ليستفاد منها غيري لاني لم انزلها لكي لايعتقد غيري بان لي دور في صياغتها الجميله ولكي يبقى الفضل لك . اكرر شكري وتقديري

اقتباس

لاني لم انزلها لكي لايعتقد غيري بان لي دور في صياغتها الجميله ولكي يبقى الفضل لك . اكرر شكري وتقديري

الفضل لله ..

لم افهم .. فالحقل BuyerName  وضعته في جدول المتابعة فقط .. وهو يمثل حقل الاسم في النموذج الرئيسي ..

آأأأه تقصد في نموذج عرض التغييرات

بالعكس اذا يوجد اضافة جميل ان ترفعها هنا فنحن جميعا  نتعلم ونساعد بعض

  • Thanks 1
  • 3 weeks later...

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.

×
×
  • اضف...

Important Information