
أحدث حل بديل لخطأ "Query is corrupt" الذي ظهر مع CVE-2019-1402
أحدث حل بديل لخطأ الاستعلام تالف الذي تم تقديمه مع CVE-2019-1402 في MS Access.
توجد حلول بديلة أخرى يجب تطبيقها على مستوى إداري، على سبيل المثال عن طريق إلغاء تثبيت التحديث الخاطئ. على عكس تلك، فإن الهدف من الحل المقدم هنا هو العمل عن طريق تعديل محتوى MDB/ACCDB نفسه تلقائيًا بأقل جهد ممكن.
أصدرت Microsoft إصلاحًا لهذه المشكلة في 2019-12-10 (يوم التحديثات) والذي سيتم تثبيته تلقائيًا افتراضيًا عبر WSUS وما إلى ذلك.
لذلك، يجب أن يصبح هذا الحل البديل قديمًا بعد تطبيق الإصلاح، ويمكن لأي شخص استخدمه استدعاء الدالة RemoveWorkaroundForCorruptedQueryIssue() لاستعادة حالة التطبيق الأصلية.
تأكد من تمكين مرجع إما Microsoft DAO 3.6 Object Library (التوافق مع الإصدارات السابقة) أو Microsoft Office x.x Access Database Engine Object Library ضمن VBA Editor -> Tools -> References (انظر #1 لمزيد من التفاصيل).
استخدم الوحدة basWorkaround.bas لتنفيذ الحل البديل المقترح من Microsoft تلقائيًا (باستخدام استعلام بدلاً من جدول). كإجراء احترازي، قم بعمل نسخة احتياطية من قاعدة البيانات أولاً.
استدعِ AddWorkaroundForCorruptedQueryIssue() لتطبيق الحل البديل وRemoveWorkaroundForCorruptedQueryIssue() لإزالته في أي وقت.
ستضيف الدالة AddWorkaroundForCorruptedQueryIssue() اللاحقة _Table إلى جميع الجداول غير النظامية، على سبيل المثال سيتم إعادة تسمية الجدول IceCreams إلى IceCreams_Table.
ستقوم أيضًا بإنشاء استعلام جديد باسم الجدول الأصلي، سيحدد جميع الأعمدة من الجدول المعاد تسميته. في مثالنا، سيتم تسمية الاستعلام IceCreams وسينفذ استعلام SQL التالي select * from [IceCreams_Table].
تقوم الدالة RemoveWorkaroundForCorruptedQueryIssue() بالإجراءات العكسية.
أنا أستخدم هذا الحل البديل في مشاريع كبيرة تحتوي على أكثر من 400 جدول بمختلف أنواعها، بما في ذلك جداول خارجية غير MDB (مثل SQL Server).
في حالتي، احتجت إلى إعادة تسمية USysRibbons_Table يدويًا إلى USysRibbons، لأنني لم أقم بتمييزه كجدول نظامي عندما أنشأته في الماضي.
ضع الأمور التالية في الاعتبار:
TableDefs!MyTableName سيتطلب منك القيام ببعض البحث والاستبدال لتلك الحالات في الكود/واجهة المستخدم لديك).