2009-10-15 1 views
8

나는 윈도우 XP (서비스 팩 3)을 실행, 4GB의 RAM과 함께 듀오 코어 시스템에 액세스 2003을 사용하고 있습니다 [5.1.2600]MS 액세스 :이 작업

을 수행 할 수있는 메모리가 부족 정기적으로 오류 메시지가 표시됩니다. "이 작업을 수행 할 수있는 메모리가 부족합니다. 불필요한 프로그램을 닫고 작업을 다시 시도하십시오."

작업 관리자를 확인하면 여유 메모리가 충분하다는 것을 나타냅니다. 열려있는 다른 프로그램을 종료해도 아무런 효과가 없습니다.

때때로 이런 상황이 발생합니다. 여러 가지 Forms가 열려 있고 사용중인 경우 때때로 양식 디자인이나 VBA 코드 변경 사항을 저장하는 동안 상황이 다릅니다.

디자인 변경 내용을 저장하려고 할 때이 오류가 발생하면 Access 개체가 손상되어 복구 할 수 없습니다.

이 문제의 원인에 대한 제안은 매우 환영 할 것입니다.

MTIA

+0

아마도 4GB가 아닌 4GB의 RAM을 의미합니다. –

+0

James - 세부 사항, 세부 사항.

+0

4MB라면 이는 생각할 필요가없는 질문이었을 것입니다. – JohnFx

답변

1

양식이나 보고서가 손상 될 가능성이 높기 때문에 새로운 mdb를 만들고 가져온 테이블 (첨부), 쿼리, 스크립트 (모듈 만), 모듈 및 메뉴 만 만들었습니다. 그런 다음 LoadFromText를 사용하여 함수를 통해 양식 및 보고서를 가져온 다음 일반 디 컴파일/컴파일 및 압축/복구 등을 수행했습니다.

지금까지는 나무를 만져 본지 얼마되지 않아 다른 충돌이 발생했습니다. 아마도이 복구 방법을 고수 할 것입니다.

많은 의견을 보내 주셔서 감사합니다.

+0

FWIW, LoadFromText 사용 후 ~ 4wks에 심각한 충돌이 발생하지 않았으므로 SaveAsText 및 LoadFromText를 사용하여 위에서 설명한 백업 및 복구 방법이 가장 가치가있는 것으로 보입니다. – maxhugen

3

오 마이.

나는 수년간 상점에서 일했으며, Access를 선택한 플랫폼으로 사용했습니다. 결국 응용 프로그램이 너무 커져서 Access 2003의 내부 메모리 제한이 발생하기 시작했습니다. 사용자가 가지고있는 것과 똑같은 문제가 발생하기 시작했습니다. 당신이주의했듯이, 이런 일이 생길 때 기억 문제의 외부 징후는 없습니다.

이 회사는이 문제에 관해 Microsoft와 마찰을 털어 놓았습니다. Microsoft 측에서 결국 패치를 제공했다고 생각합니다. 따라서 동일한 패치를 제공 할 수 있기 때문에 발생한 상황과 비슷한 상황 인 것처럼 들리면 Microsoft에이 사실을 알릴 수 있습니다.

궁극적으로 장기적인 해결책은 응용 프로그램을 더 작은 조각으로 나누는 것입니다. Access 2007 로의 이전은 도움이되지 않았습니다. 실제로 Access 2007에는 움직이는 부분이 많으므로 상황이 더욱 악화되었습니다.

+0

로버트 감사. 이 응용 프로그램은 실제로 매우 작습니다 ~ 40 폼 및 하위 폼, 보고서에 대해 동일한 ~ 11,000 줄의 VBA 코드. MS 지원에 관해서는 몇 년 전 포기했습니다. 앱에 버그를 발견했을 때 지불하는 것이 차 한잔이 아니 었습니다 :) – maxhugen

+0

MSDN 구독자에게는 무료 인시던트가 있습니다. 이 특별한 경우 Microsoft는 무료로 패치를 제공해야합니다. –

1

Access에서 실제로 문제가 무엇인지 알 수없는 경우이 또한 기본 오류 메시지입니다. 이제 MDB가 매우 큰 경우 800 개 이상의 폼 및 보고서를 모듈로 작성하면 MDB를 만들 때 메시지가 표시되지만 MDB가 너무 커질 수 있습니다. ACC2000: "Microsoft Access Was Unable to Create an MDE Database" Error Message

가끔 이런 일이 발생했습니다. 그리고 현재의 MDB는 그다지 크지 않습니다. 압축 및 복구는 테이블, 인덱스 또는 관계 이외의 개체에서 오류를 검색하지 않습니다. 따라서 다른 MDB로 가져 오는 것이 이러한 오류를 해결할 수있는 유일한 방법입니다.

네트워크를 통해이 MDB에서 작업하고 있습니까? 그게 내가이 문제를 일으킬 수 있다고 생각할 수있는 유일한 것입니다.

+0

안녕하세요 Tony : 앱이 작습니다. 사실, compact/repair는 쓸모가 없으므로 모든 객체를 새로운 mdb로 가져옵니다. 앱은 개발하는 동안 내 로컬 드라이브에 앉아있는 FE/BE입니다. 문서화되지 않은 함수 Application.SaveAsText를 통해 개체를 백업 한 다음 Application.LoadFromText를 사용하여 개체를 가져 와서 가져올 수없는 손상된 개체를 복구했습니다. 비록 힘들지만 Access의 불안정은 나를 걱정하고 있습니다. 때때로 사용자에게도 마찬가지입니다. – maxhugen

+0

최대, 모든 개체를 수행 할 손상된 Microsoft Access MDB http://www.granite.ab.ca/access/corruption/corruptobjects.htm 내의 손상된 개체 링크 중 하나에 도구가 있습니다. 분명히 데이빗의 제안을 검토 할 것입니다. 비록 그것이 부패한 VBA인지 확실하지는 않습니다. –

+0

감사합니다. Tony. 저는 Arvin Meyer와 같은 기능을했습니다. 백업 전략의 일환으로 모든 개체를 타임 스탬프 폴더에 덤프하고 매일 여러 번 사용합니다. 나는 두 종류의 부패 된 양식을 수출했으며, 양식의 진술은 ????????하지만 VBA는 괜찮은 것 같습니다. – maxhugen

7

프런트 엔드의 VBA 프로젝트가 손상되었을 수 있습니다. 당신은 적절한 액세스 코딩 방법을 처음부터 다시하고 사용할 필요가 :

VBE 옵션에
  1. 는 수요가 컴파일을 해제 (이유에 대한 자세한 내용은 Michael Kaplan's article on DECOMPILE 참조).

  2. VBE 옵션의 경우 REQUIRE VARIABLE DECLARATION을 설정하십시오.

  3. VBE에서는 도구 모음을 사용자 지정하여 COMPILE 단추에 쉽게 액세스 할 수 있습니다 (디버그 메뉴에 있음). 또한 VIEW 메뉴에서 CALL STACK 버튼을 추가하는 것이 좋습니다. 브레이크 모드에서 디버깅 오류에 편리하기 때문입니다. 여기에서 요점은 가능한 한 쉽게 디버깅 및 컴파일을하는 것입니다.

  4. 환경을 설정 한 후 새로 복구 된 프로젝트의 모든 모듈을 검토하고 OPTION EXPLICIT이없는 모듈의 맨 위에 OPTION EXPLICIT을 추가하십시오. 그런 다음 컴파일하십시오. 잘못된 코드가있는 곳을 빨리 찾아 내고 수정해야합니다.

  5. 지금부터는 프로그래밍 할 때 자주 컴파일됩니다. 코드 두 줄 또는 세 줄마다. 아마 코딩 할 때 하루에 100 번 이상 프로젝트를 컴파일 할 것입니다.

  6. 주기적으로 프로젝트를 디 컴파일하여 압축하고 다시 컴파일하십시오. 이렇게하면 정기적 인 개발 과정에서 누적 된 찌꺼기가 제거됩니다.

이러한 방법을 사용하면 손상되지 않은 프로젝트의 코드가 가능한 한 깨끗한 상태로 유지됩니다. 이미 손상된 프로젝트를 복구하기 위해 아무 것도하지 않습니다.

프로젝트를 다시 작성하는 방법과 관련하여 Application.SaveAsText를 사용하여 모든 개체를 내보내고 Application.LoadFromText를 사용하여 새 빈 데이터베이스로 가져 오는 대폭적인 방법을 생각해 봅니다. 가져 오기가 SaveAsText/LoadFromText주기에서 생존하지 않는 손상된 구조를 가져올 수 있기 때문에 기존의 손상된 프런트 엔드에서 가져 오는 것보다 간단합니다.

많은 독립 실행 형 클래스 모듈을 포함하여 코드를 많이 사용하는 중요하지 않은 앱을 사용하여 Access에서 매일 프로그래밍합니다. 나는 5 년 넘게 부패를 코드화 할 객체를 잃어 버리지 않았고, 여전히 A97을 사용하고 있던 날에도 그랬다.

+0

David에게 감사드립니다. Re 1, 그게 뭐야? (마이클 카플란의 기사에서 다루지 않음) 2 : 항상 켜십시오. 3 : 모든 코드가 변경된 후에는 항상 컴파일합니다. 4 : 항상 이것을 사용하십시오. 5 : 나는 또한 많은 것을 컴파일한다. 6 : 나는 또한 정기적으로 역 컴파일/재 컴파일을한다. 나는 Access에서 매일 ~ 10 년 동안 일합니다. 어떤 코드도 잃어 버리지 않았습니다 - 저는 너무 많은 VBA 모듈/클래스를 가지고 있습니다 - 그러나 가끔씩 손상된 폼이나 리포트를 얻습니다. 하지만 최근에 나는이 '기억'오류가 발생했습니다. 오늘 나는 대부분의 양식과 모든 보고서를 잃어 버렸다! 다행히 어제부터 모든 개체의 텍스트 백업이 있었으며 LoadFromText를 사용하여 양식과 보고서를 복구했습니다. – maxhugen

+0

이 문서에서는 VBA에서 추적해야하는 컴파일 수준의 수가 증가하므로 증분 컴파일을 원하지 않는 이유를 설명합니다. 명시 적 컴파일은 완전한 컴파일입니다. COMPILE ON DEMAND (OPTION | GENERAL 탭을 보는 동안 F1을 누르십시오)에서 도움말 파일 기사를 확인하고 싶을 수도 있습니다. –

0

이 문제가 여러 번 발생하여 마침내 해결 된 솔루션을 발견했습니다. 나는 그 문제를 일으키는 것이 무엇인지 모르지만 그것을 해결하는 방법을 알고있다.

일반적으로 양식을 열면 오류가 발생합니다. 당신이해야 할 일은 그 양식을 완전히 다시 만드는 것입니다. 이렇게하는 가장 쉬운 방법은 먼저 문서화되지 않은 함수 Application.SaveAsText를 사용하여 양식을 텍스트 파일로 내보내는 것입니다. 그런 다음 데이터베이스에서 양식을 삭제하고 Application.LoadFromText로 다시로드합니다.

4

이 오래된 게시판을 넘어서서 흥미로운 점을 보았을 때, 업데이트가 될 것이라고 생각 했나요?

2 년 뒤에, 2007 년의 많은 앱 작업과 오래된 2003 년 (심지어 '97) 앱을 수행하면서, 2007 년은 2003 년보다 실제로 더 심한 충돌이 발생하지 않는 것으로 나타났습니다. 정의 (양식 및 보고서 특히)가 쉽게 손상됩니다.

나는 여전히 David-W-Fenton의 제안 1-6 (위)과 Application.SaveAsText (위의 Tony Toews의 제안 및 링크 참조)를 더한 것입니다. 등, 내가 다음을 수행 액세스 "| | 충돌없는 오류를 던지고 이상한 이되는"의 어떤 힌트를 제공하는 경우

요즘, 그것은 97, 2003 또는 2007인지 나는 일하고 있어요 :

  1. 즉시 액세스 응용 프로그램을
  2. 백업 MDB를 /에만 적용 파일
  3. 를 다시 열고 누른 동안 응용 프로그램을 닫습니다 [SHIFT]를 아무것도 실행하지 (다른 백업으로) Application.SaveAsText를 사용하여 텍스트로
  4. 수출 모든 객체
  5. 닫고 다시 엽니이/디 컴파일 스위치를 사용하여 응용 프로그램
  6. 다시 컴파일 VBA 코드
  7. 컴팩트/복구를 수행합니다.

이 모든 것이 해결되는 것은 아니지만 Access 개체의 손상 수를 현저하게 줄입니다.

3

빠른 해결책; 일 보장 : 직접 실행 창에

열기 VBA (Alt-F11) 다음과 같이 입력 : 다음

가이 다른 사람을 도움이되기를 바랍니다 :)의
Application.LoadFromText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive" 

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

!

+0

'Application.LoadFromText acForm, "형식 이름이 잘못되었습니다", CurrentProject.Path & "\ zzTempRevive"문을 실행 한 후 _errors.txt_에 몇 가지 오류가 있습니다. 오류를 수정 한 다음 명령문을 다시 실행하십시오. – yW0K5o