السلام عليكم 🙂
مايكروسوفت عملت اضافة لجداول الاكسس 2010 (وتم ابقاء هذه الميزة للنسخ التالية) ، عملت الاحداث التالية لكل حقل (حقول النص والتاريخ والرقم (ويشمل الرقم التلقائي و العملة) فقط) وهذه الاحداث (هناك تسمى Trigger) كانت ميزة في جداول SQL Server :
للسجلات : حدث بعد ادخال السجل ، حدث بعد حذف السجل ، حدث قبل حذف السجل ،
للحقول : حدث بعد تحديث الحقل ، حدث قبل تحديث الحقل
ويمكن عمل هذه الاحداث والجدول في وضع التصميم:
.
او الجدول في وضع
.
لغة كتابة الاحداث ليست VBA وانما الماكرو المضمن ، والذي يمكنه ان ينادي دالة في وحدة نمطية هكذا (هنا ننادي الدالة fMsgbox) :
.
هناك طريقتين لكتابة الماكرو المضمن ، ونتيجة الكتابة النهائية هي كما نراها في الصورة التالية :
- الطريقة اليدوية (وعيبها انها بطيئة ، وخصوصا اذا عندك حقول كثيرة في الجدول ، وعندك جداول كثيرة ، وعندك برامج كثيرة)
1. اذا لم يستطع الماكرو المضمن تنفيذ احد الاوامر ، فإنه يعمل جدول للاخطاء التي صادفها ، اسمه USysApplicationLog ، وتراه هنا:
.
او
ولأنه جدول نظام ، فيكون مخفي ، الى ان تطلب من الاكسس ان يُظهر جميع جداول النظام ، فترى الجدول
.
لذا ومن واقع تجربة ، انصح بكتابة هذا السطر الاول (لتلافي اي اخطاء ، مما يؤدي لتوقف عمل الماكرو) ،
2. نكتب السطر كما هو ، بعد تغيير اسم الحقل الفريد/المميز في بياناته والمفرس بلا تكرار (انصح بأن يكون عندك حقل فريد ومميز في بياناته ، وانا دائما استعمل في برامجي حقل الترقيم التلقائي ، والذي نستفيد منه هنا استفادة قصوى ، فهو الدليل على محتويات السجل) ،
3. نظيف سجل جديد في الجدول الأخر ،
4. نبدأ بتعبئة الحقول بالامر SetField ، ثم اسم الحقل ، ثم قيمة الحقل ، ونستمر لعدد الحقول التي نريد اضافة بياناتها للجدول الآخر ،
.
- طريقة برمجية عن طريق عمل ملف XML نضع فيه الاوامر اعلاه ، ثم نستورده لقاعدة البيانات ،
والملف عبارة عن ملف نصي ولكن بصيغة XML ، يجمع فيه جميع الاحداث (مرفق نسخة من الملف لقاعدة البيانات التي تم ارفاقها في مشاركتي الاولى)
واليكم الجزء للحدث الذي في الصورة الاعلى
.
وثم نستخدم الكود التالي لإستيراد هذا الملف:
من نفس برنامج الاكسس
application.LoadFromText acTableDataMacro, "Table_Name", "D:\xml_File.xml"
من برنامج اكسس خارجي
'Insert/Load this DataMacro in the Table Events
Dim accApp As Object
Set accApp = CreateObject("Access.Application")
accApp.OpenCurrentDatabase Me.str_DB_Name 'D:\temp\myDB.accdb
accApp.LoadFromText acTableDataMacro, Me.lst_Tables, xml_File
accApp.CloseCurrentDatabase
accApp.Quit
Set accApp = Nothing
.
والطريقة التي عرفت بها الكود اعلاه ، هي:
اعمل كود في احد هذه الاحداث او في جميعها ، وليكن بضعة اسطر حتى لا نضيع في الاكواد ، واحفظ الجدول ، ثم استخدم هذا الكود لتصدير DataMacro الذي عملناه لهذا الجدول ، هكذا :
application.SaveAsText acTableDataMacro, "Table_Name", "D:\xml_File.xml"
.
نصائح:
اختار الحقول المهمة ، ولا تستعمل جميع الحقول ،
الجدول tbl_x_AuditTrail سيزداد حجمه بسرعة ، ولكن كثرة الجداول وكثرة عدد المستخدمين لا يُبطئ العمل ،
في الجدول tbl_x_AuditTrail هناك حقل ChangeBy وهو اسم المستخدم عند دخوله الكمبيوتر ، وحقل ChangedOn وهو اسم الكمبيوتر الذي تم التعديل منه ، هاتان الدالتان تكونان في برنامج الواجهة ، طبعا يمكن استبدالها باسم المستخد حسب الصلاحيات ، وIP الكمبيوتر اذا كان لإسم الكمبيوتر اهمية ،
الجدول tbl_x_AuditTrail لا تسمح لأحد ان يراه ، لأنه يمكن حذف وتغيير بياناه ، فيصبح عديم الفائدة ،
وبما ان برنامجنا كان ذو بيانات حساسة ، فكنا نراقب من يتصفح البيانات كذلك ، بمناداة دالة عند حدث "الحالي" للنموذج ، ونستعمل "Browse" في حقل عن Change_Delete_Insert .
------------------------------------------
2024-10-30 قاعدة بيانات وبها نموذج لعمل الجميع اعلاه برمجيا
جعفر
tbl_info_DataMacro.xml.zip