
CVE-2019-1402 के साथ शुरू हुई "Query is corrupt" त्रुटि का नवीनतम समाधान
MS Access में CVE-2019-1402 के साथ पेश की गई Query is corrupt त्रुटि के लिए नवीनतम समाधान।
अन्य समाधान मौजूद हैं जिन्हें प्रशासनिक स्तर पर लागू करना होता है, उदा. गलत अपडेट को अनइंस्टॉल करके। इनके विपरीत, यहाँ प्रदान किए गए समाधान का उद्देश्य MDB/ACCDB सामग्री को स्वचालित रूप से बदलकर काम करना है जिसमें यथासंभव कम काम करना पड़े।
माइक्रोसॉफ्ट ने 2019-12-10 (पैच डे) को इस समस्या का एक फिक्स जारी किया जो डिफ़ॉल्ट रूप से WSUS आदि के माध्यम से स्वचालित रूप से इंस्टॉल हो जाएगा। इसलिए यह समाधान फिक्स लागू होने के बाद अप्रचलित हो जाना चाहिए और जिस किसी ने इसका उपयोग किया है वह मूल एप्लिकेशन स्थिति को बहाल करने के लिए RemoveWorkaroundForCorruptedQueryIssue() फ़ंक्शन को कॉल कर सकता है।
सुनिश्चित करें कि VBA Editor -> Tools -> References के अंतर्गत या तो Microsoft DAO 3.6 Object Library (पिछड़ा संगतता) या Microsoft Office x.x Access Database Engine Object Library संदर्भ सक्षम है (अधिक जानकारी के लिए देखें)।
माइक्रोसॉफ्ट के सुझाए गए समाधान (टेबल के बजाय क्वेरी का उपयोग करके) को स्वचालित रूप से लागू करने के लिए basWorkaround.bas मॉड्यूल का उपयोग करें। सावधानी के तौर पर, पहले अपने डेटाबेस का बैकअप लें।
समाधान लागू करने के लिए AddWorkaroundForCorruptedQueryIssue() को कॉल करें और इसे किसी भी समय हटाने के लिए RemoveWorkaroundForCorruptedQueryIssue() को कॉल करें।
AddWorkaroundForCorruptedQueryIssue() सभी गैर-सिस्टम तालिकाओं में प्रत्यय _Table जोड़ देगा, उदा. तालिका IceCreams का नाम बदलकर IceCreams_Table कर दिया जाएगा।
यह मूल तालिका नाम के साथ एक नई क्वेरी भी बनाएगा, जो नाम बदली गई तालिका के सभी कॉलम का चयन करेगी। हमारे उदाहरण में, क्वेरी का नाम IceCreams होगा और वह SQL select * from [IceCreams_Table] निष्पादित करेगी।
RemoveWorkaroundForCorruptedQueryIssue() उल्टी क्रियाएं करता है।
मैं इस समाधान का उपयोग सभी प्रकार की 400+ तालिकाओं वाले बड़े प्रोजेक्ट्स पर कर रहा हूं, जिनमें बाहरी गैर-MDB तालिकाएं (जैसे SQL Server) शामिल हैं।
मेरे मामले में मुझे USysRibbons_Table का नाम मैन्युअल रूप से वापस USysRibbons में बदलना पड़ा, क्योंकि मैंने इसे पहले बनाते समय सिस्टम तालिका के रूप में चिह्नित नहीं किया था।
निम्नलिखित बातों को ध्यान में रखें:
TableDefs!MyTableName जैसे स्टेटमेंट का स्पष्ट रूप से उपयोग करने के लिए आपको अपने कोड/UI में उन उदाहरणों के लिए खोज और बदलाव करना होगा)।