2009-10-15 16 views
8

मैं एक जोड़ी कोर मशीन पर पहुँच 2003 का उपयोग कर रहा हूँ रैम 4 जीबी के साथ, Windows XP (सर्विस पैक 3) चल रहा है [2600/05/01]एमएस एक्सेस: इस आपरेशन

करने के लिए पर्याप्त स्मृति नहीं है समय-समय पर, मुझे एक त्रुटि मिलती है "इस ऑपरेशन को करने के लिए पर्याप्त स्मृति नहीं है। अनइडेड प्रोग्राम बंद करें और फिर से ऑपरेशन आज़माएं।"

टास्क मैनेजर की एक जांच से संकेत मिलता है कि बहुत सारी मुफ्त मेमोरी है। अन्य खुले कार्यक्रमों को बंद करने से कोई फर्क नहीं पड़ता।

यह कई मायनों होता है, और विभिन्न परिस्थितियों में: कभी कभी, फार्म डिजाइन या VBA कोड परिवर्तनों को सहेजे कभी कभी जब कई रूपों खुला और उपयोग में हैं, जबकि।

तो डिजाइन बदलाव सहेजने का प्रयास है, और इस त्रुटि तब होती है, पहुँच वस्तुओं भ्रष्ट कर रहे हैं और बरामद नहीं किया जा सकता है।

इस पर होने वाले किसी भी सुझाव का बहुत स्वागत होगा।

एमटीआईए

+0

आप शायद 4 जीबी रैम का मतलब है, 4 एमबी नहीं। –

+0

जेम्स - विवरण, विवरण।

+0

यदि यह 4 एमबी था, तो यह कोई ब्रेनर सवाल नहीं होता। – JohnFx

उत्तर

1

जैसा कि मुझे पता है कि यह या तो रूपों या रिपोर्ट है जो अधिकतर दूषित हो जाते हैं, मैंने एक नया एमडीबी बनाया, और केवल आयातित टेबल (संलग्न), प्रश्न, स्क्रिप्ट (केवल एक), मॉड्यूल और मेनू। फिर मैंने फ़ंक्शन के माध्यम से फ़ॉर्म और रिपोर्ट आयात करने के लिए लोडफ्रॉमटेक्स्ट का उपयोग किया, और फिर सामान्य डिकंपाइल/संकलन और कॉम्पैक्ट/मरम्मत इत्यादि

अभी तक, लकड़ी को स्पर्श करें, मुझे कुछ दिनों में कोई और दुर्घटना नहीं हुई है, इसलिए मैं शायद इस रिकवरी विधि के साथ रहेंगे।

आपके सुझावों के लिए सभी को बहुत धन्यवाद।

+0

FWIW, लोडफ्रॉमटेक्स्ट का उपयोग करने के बाद से मुझे ~ 4wks के लिए गंभीर क्रैश नहीं हुआ है, इसलिए SaveAsText और LoadFromText का उपयोग करके ऊपर वर्णित बैकअप और पुनर्प्राप्ति विधियां सबसे सार्थक प्रतीत होती हैं। – maxhugen

3

ओह माय।

मैं कई वर्षों कि चुनाव के अपने मंच के रूप में इस्तेमाल किया पहुँच के लिए एक दुकान में काम किया। अंततः एप्लिकेशन इतना बड़ा हो गया कि उसने एक्सेस 2003 की आंतरिक मेमोरी सीमा को मारना शुरू कर दिया। उन्होंने आपके पास होने वाली वही समस्या का अनुभव करना शुरू कर दिया। जैसा कि आपने देखा है, ऐसा होने पर स्मृति समस्याओं का कोई बाहरी संकेत नहीं है।

कंपनी समस्या के बारे में माइक्रोसॉफ्ट के साथ विस्तार से बात की, और मेरा मानना ​​है कि माइक्रोसॉफ्ट अंततः उन्हें एक पैच के साथ आपूर्ति की। तो हो सकता है कि आप माइक्रोसॉफ्ट से इस बारे में बात करना चाहें, अगर ऐसा लगता है कि आप जो भी अनुभव कर रहे हैं, उसी तरह की स्थिति की तरह लगता है, क्योंकि वे आपको एक ही पैच के साथ आपूर्ति करने में सक्षम हो सकते हैं।

आखिरकार लंबे समय तक समाधान छोटे टुकड़ों में आवेदन तोड़ना है। एक्सेस 2007 में जाने से मदद नहीं मिली; असल में, इससे चीजों को और भी खराब कर दिया गया क्योंकि एक्सेस 2007 में और अधिक चलने वाले हिस्से हैं।

+0

धन्यवाद रॉबर्ट। यह एप्लिकेशन वास्तव में काफी छोटा है, ~ 40 रूपों और सबफॉर्म, रिपोर्ट के लिए, ~ 11,000 लाइनों की वीबीए कोड। एमएस समर्थन के लिए, मैंने उस साल पहले छोड़ दिया था: जब मुझे पता चला कि उनके ऐप्स में कीड़े चाय का प्याला नहीं था :) – maxhugen

+0

यदि आपके पास एमएसडीएन सदस्यता है, तो आपके पास मुफ्त घटनाएं हैं। इस विशेष मामले में माइक्रोसॉफ्ट को पैच मुफ्त में प्रदान करना चाहिए। –

1

यह भी डिफ़ॉल्ट त्रुटि संदेश है जब एक्सेस को पता नहीं है कि समस्या वास्तव में क्या है। अब यदि आपका एमडीबी विशेष रूप से बड़ा है, तो 800 से अधिक फॉर्म और मॉड्यूल के साथ रिपोर्ट कहें, हां, एमडीबी बहुत बड़ा हो सकता है, हालांकि जब आप एमडीई बनाने के लिए गए तो आपको एक संदेश मिला। ACC2000: "Microsoft Access Was Unable to Create an MDE Database" Error Message

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

क्या आप नेटवर्क पर इस एमडीबी पर काम कर रहे हैं? यह केवल एक चीज है जिसके बारे में मैं सोच सकता हूं कि इस समस्या का कारण हो सकता है।

+0

हाय टोनी: ऐप छोटा है। सच है, कॉम्पैक्ट/मरम्मत का कोई उपयोग नहीं है, इसलिए मैं सभी वस्तुओं को एक नए एमडीबी में आयात करता हूं। एप एक एफई/बीई है जो विकास के दौरान मेरे स्थानीय ड्राइव पर बैठा है। मैंने अनियंत्रित फ़ंक्शन एप्लिकेशन SaveAsText के माध्यम से ऑब्जेक्ट का बैक अप लेने के लिए लिया है, और उसके बाद अनुप्रयोग। लोडफ्रॉमटेक्स्ट दूषित ऑब्जेक्ट्स को पुनर्प्राप्त करने के लिए जो आयात नहीं किया जा सका। हालांकि यह श्रमिक है, और एक्सेस की अस्थिरता मुझे चिंता कर रही है, क्योंकि यह कभी-कभी किसी उपयोगकर्ता के साथ भी होती है। – maxhugen

+0

मैक्स, एक भ्रष्ट माइक्रोसॉफ्ट एक्सेस एमडीबी http://www.granite.ab.ca/access/corruption/corruptobjects.htm के भीतर दूषित ऑब्जेक्ट्स में से किसी एक लिंक पर एक उपकरण है जो सभी ऑब्जेक्ट्स करेगा। मैं निश्चित रूप से डेविड के सुझावों की भी समीक्षा करता हूं हालांकि मुझे यकीन नहीं है कि यह वीबीए है जो भ्रष्ट है। –

+0

धन्यवाद टोनी। मेरे पास एक ऐसा कार्य है जो आर्विन मेयर के जैसा ही है। यह मेरी बैकअप रणनीतियों के हिस्से के रूप में, सभी वस्तुओं को समय-मुद्रित फ़ोल्डर में डंप करता है, और मैं हर दिन कई बार उपयोग करता हूं। मैंने कुछ भ्रष्ट रूपों का निर्यात किया है, और ध्यान दें कि फॉर्म डिस्क्रिप्शन को बदल दिया गया है ????????आदि, लेकिन वीबीए ठीक प्रतीत होता है। – maxhugen

7

आपके सामने वाले अंत में वीबीए परियोजना दूषित हो सकती है। आप स्क्रैच से यह पुनर्निर्माण और उचित पहुँच कोडिंग प्रथाओं तो उपयोग करने की आवश्यकता:

  1. VBE विकल्पों में

    , मांग पर संकलन बंद कर देते हैं (के विवरण के लिए Michael Kaplan's article on DECOMPILE क्यों)।

  2. VBE विकल्पों में

    , पर परिवर्तनशील घोषणा की आवश्यकता होती है बारी।वीबीई में

  3. , अपनी टूलबार को कस्टमाइज़ करें ताकि COMPILE बटन आसानी से पहुंच योग्य हो (यह डीबग मेनू पर है)। मैं कॉल स्टैक बटन (दृश्य मेनू से) जोड़ने की भी सिफारिश करता हूं, क्योंकि यह ब्रेक मोड में त्रुटियों को डीबग करने के लिए आसान है। यहां बिंदु जितना संभव हो सके डीबगिंग और संकलन करना है।

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

  5. अब से प्रोग्रामिंग, कोड की हर दो या तीन पंक्तियों के बाद, अक्सर संकलित करते समय। कोडिंग करते समय मैं दिन में 100 या उससे अधिक बार अपनी परियोजना संकलित करता हूं।

  6. समय-समय पर आपके प्रोजेक्ट को कम कर देता है और कॉम्पैक्ट करता है और इसे पुन: संकलित करता है। इससे नियमित विकास के दौरान जमा होने वाली किसी भी क्रूड को साफ कर दिया जाएगा।

ये अभ्यास बीमा करते हैं कि गैर-भ्रष्ट परियोजना में कोड यथासंभव एक शर्त को साफ करता है। यह पहले से ही दूषित परियोजना को पुनर्प्राप्त करने के लिए कुछ भी नहीं करेगा।

प्रोजेक्ट को पुनर्निर्माण के तरीके के संबंध में, मुझे लगता है कि मैं एप्लिकेशन के साथ सभी ऑब्जेक्ट्स को निर्यात करने का कठोर मार्ग जाऊंगा .aveAsText और उन्हें एप्लिकेशन के साथ एक नए रिक्त डेटाबेस में आयात करना .LoadFromText। यह आपके मौजूदा दूषित फ्रंट एंड से आयात करने से बेहतर है क्योंकि आयात भ्रष्ट संरचनाओं को आयात कर सकता है जो SaveAsText/LoadFromText चक्र से बच नहीं पाएंगे।

मैं दैनिक एक्सेस में प्रोग्राम करता हूं, गैर-तुच्छ ऐप्स के साथ काम करता हूं जो बहुत सारे कोड का उपयोग करते हैं, जिनमें स्टैंडअलोन क्लास मॉड्यूल शामिल हैं। मैंने 5 वर्षों में भ्रष्टाचार को संहिता देने के लिए कोई वस्तु नहीं खो दी है, और वह उस दिन वापस था जब मैं अभी भी ए 7 9 का उपयोग कर रहा था।

+0

धन्यवाद डेविड। पुन 1, वह क्या करता है? (माइकल कपलन के लेख में शामिल नहीं) 2: हमेशा चालू। 3: मैं हमेशा हर कोड परिवर्तन के बाद संकलित करता हूं। 4: हमेशा इसका इस्तेमाल करें। 5: मैं भी बहुत संकलित करता हूं। 6: मैं भी नियमित रूप से decompile/recompile। मैं भी ~ 10 वर्षों के लिए, एक्सेस के साथ दैनिक काम करता हूं। किसी भी कोड को खोना नहीं है - मेरे पास भी बहुत सारे वीबीए मॉड्यूल/कक्षाएं हैं - लेकिन कभी-कभी भ्रष्ट रूप या रिपोर्ट प्राप्त होती है। लेकिन हाल ही में मुझे यह 'स्मृति' त्रुटि मिल रही है। आज मैंने ज्यादातर रूपों को खो दिया, और सभी रिपोर्टें! सौभाग्य से, मेरे पास कल से सभी वस्तुओं का टेक्स्ट बैकअप था, और फॉर्म और रिपोर्ट पुनर्प्राप्त करने के लिए LoadFromText का उपयोग किया। – maxhugen

+0

लेख बताता है कि आप वृद्धिशील संकलन क्यों नहीं चाहते हैं, क्योंकि वे संकलन स्तरों की संख्या में वृद्धि करते हैं जिन्हें वीबीए को ट्रैक रखना है। स्पष्ट संकलन एक पूर्ण संकलन है। आप COMPLELE ऑन डिमांड पर सहायता फ़ाइल आलेख को देखना चाह सकते हैं (विकल्प देखने के दौरान F1 दबाएं | सामान्य टैब)। –

0

मुझे इस समस्या का सामना कई बार हुआ है और अंततः एक समाधान मिला जो काम करता है। मुझे नहीं पता कि समस्या का कारण क्या है, लेकिन मुझे पता है कि इसे कैसे हल किया जाए।

आमतौर पर त्रुटि तब होती है जब आप कोई फॉर्म खोलते हैं। आपको जो करना है वह पूरी तरह से उस फॉर्म को फिर से बनाना है। ऐसा करने का सबसे आसान तरीका यह है कि पहले फॉर्म को फ़ाइल फ़ाइल में अनियंत्रित फ़ंक्शन एप्लिकेशन.व्यूएएसटेक्स्ट के साथ निर्यात करना है। फिर आप अपने डेटाबेस से फॉर्म हटाते हैं और इसे एप्लिकेशन के साथ पुनः लोड करते हैं। लोडफ्रॉमटेक्स्ट।

4

मेरा पुराना पोस्ट भरने के बाद, और यह देखने में काफी दिलचस्पी थी, मैंने सोचा कि शायद एक अपडेट क्रम में होगा?

तो ट्रैक के 2 साल बाद, 2007 के बहुत से ऐप के साथ-साथ पुराने 2003 (और यहां तक ​​कि '97) ऐप्स भी कर रहे हैं, मुझे लगता है कि 2007 की तुलना में 2007 में वास्तव में बुरा क्रैश होने की संभावना कम है - जहां एक्सेस ऑब्जेक्ट परिभाषाएं (रूप और रिपोर्ट esp।) आसानी से दूषित हो जाएंगी।

मैं अभी भी डेविड-डब्ल्यू-फेंटन द्वारा धार्मिक रूप से 1-6 (उपरोक्त) सुझावों का पालन करता हूं, साथ ही एप्लिकेशन का उपयोग। सेवएएसटेक्स्ट (ऊपर टोनी टूज़ 'सुझाव और लिंक देखें)।

इन दिनों, चाहे वह 97, 2003 या 2007 है मैं पर काम कर रहा हूँ, अगर प्रवेश की "अजीबकिया जा रहा है | दुर्घटनाग्रस्त | भरी त्रुटियों फेंक" किसी भी संकेत देता है आदि, मैं निम्नलिखित है :

  1. तुरंत पहुंच एप्लिकेशन
  2. बैकअप mdb/ACCDB फ़ाइल
  3. फिर से खोलें दबाए रखते हुए, जबकि ऐप को बंद [Shift] तो कुछ भी नहीं चलाता है
  4. निर्यात सब (एक और बैकअप के रूप में) का उपयोग कर Application.SaveAsText पाठ के रूप में वस्तुओं
  5. बंद और फिर से खुल एप्लिकेशन/विघटित स्विच का उपयोग कर
  6. पुन: संयोजित VBA कोड
  7. एक कॉम्पैक्ट/मरम्मत करते हैं।

यह सबकुछ हल नहीं करता है, लेकिन यह एक्सेस ऑब्जेक्ट्स के भ्रष्टाचार की संख्या को काफी कम करता है जो मैं देख सकता हूं।

3

त्वरित समाधान; काम करने की गारंटी:

ओपन VBA (Alt-F11) तत्काल विंडो में निम्न दर्ज करें:

Application.SaveAsText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive" 
तो

Application.LoadFromText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive" 

यह :) उम्मीद है कि यह दूसरों को मदद मिलती है कि

!

+0

'application.LoadFromText acForm," भ्रष्ट फ़ॉर्म नाम यहां निष्पादित करने के बाद ", CurrentProject.Path &" \ zzTempRevive "' कथन कुछ त्रुटियों को _errors.txt_ में पाया जा सकता है। त्रुटियों को ठीक करें फिर फिर से कथन चलाएं। – yW0K5o

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