2013-06-24 8 views
9

हमारे पास एक्सेस में लिखा गया एक कस्टम प्रोग्राम है जिसमें इसमें विषम दुर्घटनाएं हैं। हमने त्रुटि प्रबंधन को जोड़ा है जो हमारे स्वयं के कोड के अंदर होने वाली किसी भी क्रैश को रिकॉर्ड और ईमेल करता है और जिसने हमें उत्पन्न की गई अधिकांश त्रुटियों को ठीक करने की अनुमति दी है, लेकिन कभी-कभी हमारे कोड के बाहर दुर्घटनाएं होती हैं।एमएस एक्सेस दुर्घटनाओं का निदान कैसे करें

एक उदाहरण है जिसे हमने पाया कि 2013 में नया हुआ - हमारे पास एक ऐसा फॉर्म है जो किसी निश्चित क्षेत्र में डेटा संपादित करने के बाद दुर्घटनाग्रस्त हो जाएगा - नई प्रविष्टि ठीक थी लेकिन रिकॉर्ड के बाद किसी भी संपादन का परिणाम होगा एमएस एक्सेस का एक पूर्ण दुर्घटना और शट डाउन। हमने समय बिताया और अंततः ट्रैक किया कि हमारे कुछ कोड फॉर्म को अगले रिकॉर्ड में स्थानांतरित करने के लिए मजबूर कर रहे थे, यह क्षेत्र पंक्ति पर अंतिम क्षेत्र था, हालांकि एक्सेस स्वयं भी अगले रिकॉर्ड में जाने का प्रयास कर रहा था। यह 2007 से सिस्टम में रहा था, लेकिन 2013 में प्रोग्राम शट डाउन का कारण बन गया।

एमएस एक्सेस के अंदर प्रोग्राम स्तर क्रैश को फंसाने और निदान करने का कोई तरीका है?

Faulting अनुप्रयोग का नाम:
Windows ईवेंट व्यूअर केवल निम्न से पता चलता msaccess.exe, संस्करण: 15.0.4454.1501, समय स्टाम्प: 0x50a35ef4 Faulting मॉड्यूल का नाम: msaccess.exe, संस्करण: 15.0.4454.1501, समय स्टाम्प : 0x50a35ef4 अपवाद कोड: 0xc0000005 दोष ऑफसेट: 0x00116452 दोषयुक्त प्रक्रिया आईडी: 0x01ce6e665043d8be दोषयुक्त अनुप्रयोग पथ:: C: 0x1398 दोषयुक्त अनुप्रयोग प्रारंभ समय \ Program Files (x86) \ Microsoft Office \ Office15 \ msaccess.exe मॉड्यूल Faulting पथ: सी: \ प्रोग्राम फ़ाइलें (x86) \ Microsoft Office \ Office15 \ MSACCESS.EXE रिपोर्ट आईडी: 6cfcb0eb-da62-11e2-89 66-842b2b86f028

उत्तर

5

यह एक पुराना धागा है, लेकिन यह Google पर शीर्ष परिणामों में से एक के रूप में आया, इसलिए मैंने सोचा कि मैं जवाब दूंगा। जब आपको "एक्सेस में कोई समस्या आती है और उसे बंद करने की आवश्यकता होती है" तो आप क्या कदम उठा सकते हैं। घटना में आमतौर पर लॉग ऑन करें आप देखेंगे:

Faulting application name: MSACCESS.EXE, version: 15.0.4869.1000, time stamp: 0x57e12b41 
Faulting module name: MSACCESS.EXE, version: 15.0.4869.1000, time stamp: 0x57e12b41 
Exception code: 0xc0000005 

इन समस्याओं का निवारण करने निराशा हो सकती है। नीचे दी गई कार्रवाइयों की सूची नीचे दी गई है, कम से कम आक्रामक से सबसे अधिक आक्रामक। मैं इन सुधारों का आविष्कार नहीं कर रहा हूं - सालों से मैंने व्यक्तिगत रूप से इस मुद्दे को हल करने के लिए व्यक्तिगत रूप से देखा है।

डिकंपाइल डाटाबेस

आपने बताया था कि यह नीति हर रिहाई डिकंपाइल है। अच्छी नीति - लेकिन हर बार आपको त्रुटि मिलने पर स्पष्ट रूप से ऐसा करें। इसका कारण यह है कि आप मूल समस्या को ठीक कर सकते हैं, लेकिन भ्रष्ट कंटेनर के कारण ध्यान नहीं दे रहे हैं।

  • मैं एक शॉर्टकट है कि "/ डिकंपाइल" स्विच के साथ डेटाबेस को लोड करता है बनाएँ।
  • इस शॉर्टकट पर डबल क्लिक करते समय शिफ्ट को दबाएं ताकि किसी भी ऑटो रन को छोड़ दिया जा सके और आप सीधे नेविगेशन विंडो पर जाएं।
  • डेटाबेस लोड होने के बाद, आपको कॉम्पैक्ट और मरम्मत बटन पर क्लिक करना होगा। डाटाबेस रीलोड के रूप में फिर से शिफ्ट दबाए रखें।
  • अब जाएं और कोड को संकलित करें और सहेजें। यही वह प्रक्रिया है जिसे मैं डिकंपाइल के लिए उपयोग करता हूं।

टेस्ट कंप्यूटर मेमोरी

खास तौर पर अगर दुर्घटनाओं में एक या दो मशीनों तक ही सीमित हैं - यह करते हैं।
ईवेंट व्यूअर की जांच करें। क्या वहां कुछ "त्रुटि" संदेश हैं जो अनुप्रयोग क्रैश का वर्णन करते हैं, और दोषपूर्ण मॉड्यूल अलग है? यदि ऐसा है तो बाधाएं अच्छी हैं कि यदि यह भ्रष्ट विंडोज़ स्थापित नहीं है, तो आप एक स्मृति समस्या को देख रहे हैं।

मुझे यकीन है कि बहुत से मेमोरी टेस्टर्स हैं, लेकिन मैं आपको एक उचित परीक्षण का उपयोग करने के लिए प्रोत्साहित करता हूं जो गिराए गए बिट्स को पकड़ लेगा। MemTest86 एक बूढ़ा है लेकिन एक गुडिया है। current version और कुछ समान रूप से अच्छे forks हैं।

परीक्षण शुरू करें और इसे कार्य के घंटों के दौरान चलने दें। मेमोरी त्रुटियों के कारण इमारत में मेरी खराब शक्ति है, इसलिए चर को समान रखें।

फार्म

से बाइनरी डेटा निकालें कभी कभी दुर्घटनाओं एक ही रूप या रिपोर्ट में होते हैं। यदि यह भ्रष्ट बाइनरी डेटा है, तो विभिन्न उपयोगकर्ताओं के साथ विभिन्न कंप्यूटरों पर क्रैश हो रहा है। यदि ऐसा है तो इन चरणों का पालन करें। (केवल उन्नत उपयोगकर्ता)

  1. तत्काल विंडो में वस्तु को टेक्स्ट के रूप में सहेजें।

    Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\ MyForm.txt"

  2. मूल रूप आइटम का नाम बदलें (जैसे MyForm_Bak को नाम बदलने)

  3. ओपन नोटपैड
  4. में निर्यात की गई फ़ाइल
  5. हटाएँ "Checksum =" रेखा (लाइन 3 पर होना चाहिए) बाइनरी डेटा
  6. साफ बाहर
    • फ़ाइल के माध्यम से देखो।
    • ऐसी लाइनें होंगी जो "पैरामीटर = स्टार्ट" से शुरू होंगी और एन्कोडेड बाइनरी डेटा की रेखाएं होंगी, जिसमें "एंड"
    • शामिल है, जब आप इन पंक्तियों में से किसी एक को ढूंढते हैं, तो आपको (विशेष रूप से) शुरुआत से अंत तक सभी लाइनों को हटा दें।
    • मापदंडों आप हटाना चाहिए: NameMap, PrtMip, PrtDevMode, PrtDevNames, PrtDevModeW, PrtDevNamesW
    • इन ब्लॉकों के सभी अपने प्रपत्र नियंत्रण परिभाषाओं से पहले दिखाई देनी चाहिए
  7. आप फ़ाइल खुला है, वहीं के माध्यम से स्क्रॉल बाकी की फाइल और अपनी आंख को पकड़ने वाली किसी चीज की तलाश करें, खासतौर पर वीबीए मॉड्यूल कोड में।
  8. फ़ाइल सहेजें
  9. पहुँच में, तत्काल खिड़की पर, प्रपत्र वापस

    Application.LoadFromText acForm में "MyForm" लोड,, CurrentProject.Path & "\ MyForm.txt"

  10. डीकंपाइल/कॉम्पैक्ट मरम्मत/रीकंपाइल

  11. फॉर्म खोलें और उम्मीद है कि सबकुछ बेहतर काम कर रहा है।

"OLE ऑब्जेक्ट" क्षेत्रों

आप छवियों या पहुँच ही में संग्रहीत तो आप एक बेहतर दृष्टिकोण खोजना चाहिए अन्य डेटा है, तो से छुटकारा। जब ओएलई डेटा संग्रहीत किया जाता है, तो इसे संग्रहीत कंप्यूटर पर सॉफ़्टवेयर (और सॉफ़्टवेयर का संस्करण) के अनुसार संग्रहीत किया जाता है। जब कोई अन्य कंप्यूटर उस ओएलई ऑब्जेक्ट डेटा को फॉर्म पर प्रदर्शित करने के लिए जाता है, लेकिन इसमें सटीक सॉफ़्टवेयर/संस्करण स्थापित नहीं होता है - आप अक्सर दुर्घटनाग्रस्त हो जाते हैं।

यदि आप छवि डेटा संग्रहीत कर रहे हैं, तो फ़ाइल नाम को स्टोर करने के लिए एक बेहतर तरीका है, और इसके बजाय छवियों को मानक स्थान पर सहेजना है। पहुंच के नए संस्करणों में मूल नियंत्रण होता है ताकि इसे जाने का रास्ता बनाया जा सके।

पूरे डेटाबेस

यह बहुत काम है पुनर्निर्माण, इसलिए मैं जब आप अन्य सभी विकल्प समाप्त हो के लिए यह बचत होगी। यदि आपको सभी उपयोगकर्ताओं के लिए समस्या आ रही है तो आपको केवल यह करने की आवश्यकता है। यदि यह सभी उपयोगकर्ताओं के लिए नहीं हो रहा है, तो यह भ्रष्ट डेटाबेस नहीं है।

द्विआधारी डेटा को हटाने में चरणों के समान, आप अपने डेटाबेस को स्क्रैच से पुनर्निर्माण करने जा रहे हैं। जब तक मैं इस कदम तक पहुंचता हूं, तब तक मैं पूरी तरह से परावर्तित मोड में हूं। हो सकता है कि यह थोड़ा सा अनुष्ठान है लेकिन मैं प्रत्यक्ष प्रतिलिपि या आयात/निर्यात के माध्यम से भ्रष्टाचार को "संरक्षित" नहीं करने में कोई छोटा कटौती और महान देखभाल के साथ सावधानी से सबकुछ करता हूं। मेरे आखिरी स्टैंड के रूप में, मुझे नहीं लगता कि यह इस मुद्दे को हल करने में कभी विफल रहा है। शुक्र है कि मुझे एक्सेस 2000 के दिनों से ऐसा नहीं करना पड़ा।

  • नया एक्सेस डेटाबेस कंटेनर बनाएं। पुराने पहुँच कंटेनर में
    • हर तालिका के लिए नए कंटेनर में एक नई तालिका बनाने के लिए:
    • आयात/निर्यात कार्यों
    • टेबल्स प्रयोग न करें। डिज़ाइन व्यू से, फ़ील्ड परिभाषाओं की प्रतिलिपि/पेस्ट करें।
    • पुराने डेटा को एक्सएमएल या सीएसवी में निर्यात करें, और फिर वहां से आयात करें।
  • क्वेरी:
    • , एसक्यूएल दृश्य में जाकर मूल क्वेरी में कॉपी और नए डेटाबेस की क्वेरी में एसक्यूएल पाठ पेस्ट करें।
  • फार्म/रिपोर्ट:
    • आवेदन का उपयोग करें।रूपों निर्यात करने के लिए SaveAsText समारोह/
    • उपयोग Application.LoadFromText समारोह उन्हें
  • मैक्रो
    • फिर आयात के लिए मैक्रो को पुन: बनाएं रूपों से
    • पट्टी बाइनरी डेटा और समीक्षा रिपोर्ट।
    • एक्सेस 2007 और नए में, नए मैक्रो सिस्टम के साथ आप बस मैक्रो खोल सकते हैं, सभी (कंट्रोल + ए) का चयन करें और रिक्त नोटपैड दस्तावेज़ में पेस्ट करें। नोटपैड से और पेस्ट फिर से नया पहुँच कंटेनर
  • मॉड्यूल
    • के भीतर एक खाली मैक्रो में नए डेटाबेस कंटेनर में सभी कोड (नियंत्रण + ए) और पेस्ट (नियंत्रण + V) का चयन करें कॉपी
  • डाटा मैक्रो
    • मैं डाटा मैक्रो के बाद से यह करने के लिए बाहर आ गए हैं नहीं था, लेकिन आप SaveAsText/LoadFromText कार्यों का उपयोग टेबल बंद डेटा मैक्रो निर्यात करने के लिए होगा।

जब सभी ने कहा और किया जाता है - आप एक बहुत साफ डेटाबेस कंटेनर होगा। परीक्षण से

निकालें अन्य चर

नेटवर्क भ्रष्टाचार

एक नेटवर्क के बंद ग्राहक लोड न करें। इसे स्थानीय ड्राइव पर रखें और इसे वहां से चलाएं।

कॉर्पोरेट बनाता

आप एक कारपोरेट वातावरण है कि उपयोग कर रहा है "कंप्यूटर बनाता है" और Decompiling, परीक्षण मेमोरी के साथ कोई सफलता मिली है, और बाइनरी डेटा अलग करना में हैं - तब तक आगे की जांच करने के लिए मना कर दिया आईटी टीम उपयोगकर्ता को एक परीक्षण मशीन प्रदान कर सकती है जिसमें केवल विंडोज़, ऑफिस और सर्विस पैक स्थापित हैं। मैं आमतौर पर खुद को स्थापित करना पसंद करता हूं इसलिए मुझे पता है कि मैं इसे भरोसा कर सकता हूं। बिना सॉफ़्टवेयर इंस्टॉल किए बिना सभी सॉफ़्टवेयर और अपडेट हाथ से स्थापित किए जाने चाहिए। इस मशीन पर एंटीवायरस स्थापित न करें।

मेरे पास आईटी विभागों ने इसे एफ.यू.डी. से बाहर कर दिया है। और अनौपचारिकता - यदि आप यही सामना करते हैं तो "समस्या में मेरी सहायता करें" संदर्भ के तहत इस मुद्दे के अपने हाथ धोएं।

बुरा पावर

स्मृति खंड में उल्लेख किया है - बिजली fluctations कर सकते हैं कंप्यूटर त्रुटियों का कारण। यदि डेटाबेस एक औद्योगिक भवन में है - तो अपने हाथों को पावर कंडीशनर या यूपीएस पर प्राप्त करने का प्रयास करें जो स्वच्छ बिजली प्रदान करता है (बैटरी से बाहर, धातु-ऑक्साइड वरिस्टर के माध्यम से मुख्य गुजरने से नहीं)

इसके अलावा, चेक करें बिजली आपूर्ति केबल जो पावर बार या आउटलेट में प्लगिंग कर रही है। सुनिश्चित करें कि गेज और वोल्टेज चश्मा पर्याप्त हैं। मैं यह इसलिए कहता हूं क्योंकि आईटी विभाग अक्सर स्टेशन पर प्लग किए गए पावर केबल्स छोड़ते हैं और बस मशीन को हटा देते हैं।कई सालों बाद, वे बीफियर बिजली की आपूर्ति का उपयोग कर रहे हैं, लेकिन केबल को स्विच नहीं किया है। यह एक फर्क पड़ता है। संदेह में, एक नया, मोटा केबल लाओ।

3

हर एक एक्सेस डेटाबेस में हर फार्म पर हर एक समारोह एक प्रवाह है कि इस तरह दिखता है होना चाहिए:

Private Sub btnMyButton_Click() 
Dim MyVar as String 
On Error GoTo ErrorHappened 

'Do some stuff here... 

ExitNow: 
    Exit Sub 

ErrorHappened: 
    MsgBox Err.Description 
    Resume ExitNow 
End Sub 

ErrorHappened अनुभाग में, आप इसे अपने टेबल कि पटरियों को लिखने हो सकता है कीड़े। यदि आप इस तरह के प्रवाह के लिए अपने सभी सब्स और फ़ंक्शंस को बदलते हैं, तो आपको अपने डेटाबेस के हर मुद्दे को फंसाने में सक्षम होना चाहिए। शायद Err.Number के साथ ही Err.Description लिखो।

+0

हम इस तरह के समान फंसाने में त्रुटि का उपयोग करते हैं - कुछ त्रुटियां हमारे कोड के बाहर होती हैं, और माइक्रोसॉफ्ट के कोड में यह हमारी त्रुटि प्रबंधन को छोड़ देती है। मैं अपने कोड के बाहर होने वाली दुर्घटनाओं को हल करने का एक प्रभावी तरीका निर्धारित करने की कोशिश कर रहा हूं (वे अभी भी हमारे कोड के कारण हो सकते हैं, लेकिन हमारा पूरा पूरा हो गया है और _then_ एक क्रैश होता है) –

+1

क्या आपका कोड संकलित है? क्या आपने इसे डिस्प्लेइल स्विच का उपयोग करके इसे कम करने की कोशिश की है, और फिर इसे फिर से संकलित करना है? –

+0

हमने यह किया है। हमारी नीति हर रिलीज पर डी-संकलन और पुन: संकलित करना है। उपरोक्त चित्रित क्रैश सामान्य है - हमारे अगले रिकॉर्ड में एक ही समय में आगे बढ़ने का एक निश्चित उदाहरण है कि एक्सेस अगले कार्यक्रम में जाने की कोशिश कर रहा है, पूरे कार्यक्रम को दुर्घटनाग्रस्त कर देता है। हमने केवल उन्मूलन के माध्यम से यह पाया कि, मेरी पहली टिप्पणी में चिपकाए गए विंडोज स्तर की त्रुटि के अलावा कोई त्रुटि संख्या कभी नहीं दी गई थी। –

1

किसी और को जो गूगल में इस सूत्र भर में ठोकर के लिए यहां रैंडम एक्सेस दुर्घटनाओं के लिए कारणों में से एक और जोड़ी हैं:

बस पृष्ठभूमि के लिए, मैं इस पर एक उप-प्रपत्र के साथ एक रूप है, एक पर लिंक तालिकाओं से डेटा लोड है सर्वर।

  • यदि आपके पास माता-पिता पर खेतों पर "_Enter" घटनाओं इस पहुँच एक अंतहीन लूप में जाने के लिए बार-बार इन घटनाओं फायरिंग का कारण हो सकता के रूप में। यह तब हुआ जब मैं सबफॉर्म पर था, और पैरेंट फॉर्म पर एक बटन दबाया। मैंने इन सभी को "_GotFocus" घटनाओं के साथ बदल दिया जिसके बजाय समस्या ठीक हुई।

  • पैरेंट फॉर्म के ऑनलोड में सबफ़ॉर्म का संदर्भ न दें। यह यादृच्छिक था, फॉर्म ठीक लोड होगा और अगली बार जब आप एक ही फॉर्म में उसी रिकॉर्ड में जाएंगे, तो यह क्रैश तक पहुंच जाएगा। इसलिए मैंने मूल रूप के ऑनलोड ईवेंट में सबफॉर्म के सभी संदर्भ हटा दिए और अब यह ठीक काम करता प्रतीत होता है। मैंने विशेष रूप से यह देखा कि जब मेरा इंटरनेट कनेक्शन धीमा था, तो ऐसा प्रतीत होता है कि मुख्य रूप सबफॉर्म से पहले लोड हो रहा था और इसलिए जब इसे संदर्भित किया गया तो यह लोड नहीं हुआ था और इसलिए एक्सेस के साथ सभी प्रकार के मुद्दों का कारण बन गया, जो अविश्वसनीय रूप से एक यादृच्छिक दुर्घटना में समाप्त हुआ पहुंच का

संबंधित मुद्दे