수색…


소개

오류가 발생하는 경우 : "Microsoft Access에 문제가있어서 프로그램을 종료해야합니다"라는 오류의 원인을 파악하는 데 도움이되는 정보가 많지 않습니다. 다음은 오류의 원인을 해결하기 위해 수행 할 수있는 일련의 단계입니다.

비고

테스트하는 동안 방정식에서 다른 변수를 제거하십시오

네트워크 손상

클라이언트를 네트워크에서로드하지 마십시오. 로컬 드라이브에 넣고 거기에서 실행하십시오.

기업용 빌드

"컴퓨터 빌드"를 사용하고 있고 Decompiling, Testing Memory, Binary data를 제거하지 않은 회사 환경에 있다면 IT 팀이 사용자에게 테스트 컴퓨터를 제공 할 때까지 추가 테스트를 거부합니다. Windows, Office 및 서비스 팩만 설치됩니다.

무인 설치를 사용하지 않고 모든 소프트웨어 및 업데이트를 수동으로 설치해야합니다. 테스트를 위해이 컴퓨터에 바이러스 백신을 설치하지 마십시오.

많은 IT 부서가 빌드로 One-Fit-All-All 방식을 시도하기 만한다는 것을 이해하고 빌드는 모두 서로 기반을 둡니다. 시간이 지남에 따라 소프트웨어 충돌로 인해 Access가 충돌하거나 이상하게 작동 할 수 있습니다.

나쁜 힘

메모리 예에서 언급했듯이 전력 변동은 컴퓨터 오류를 일으킬 수 있습니다. 데이터베이스가 산업용 건물에있는 경우 깨끗한 전원을 제공하는 파워 컨디셔너 또는 UPS (금속 산화물 배리스터를 통과하는 주 전원이 아닌 배터리에서 꺼내십시오)에 손을 대십시오.

또한 전원 막대 또는 콘센트에 꽂혀있는 전원 공급 장치 케이블도 확인하십시오. 게이지 및 전압 사양이 충분한 지 확인하십시오. IT 부서에서는 종종 전원 케이블을 스테이션에 꽂아두고 장비를 제거합니다. 수년 후에, 그들은 더 비싼 전원 공급 장치를 사용하고 있지만 케이블을 스위치 아웃하지 않았습니다. 그것은 차이를 만든다. 의심스러운 경우 새롭고 두꺼운 케이블을 가져 오십시오.

데이터베이스 디 컴파일

항상 초기 수정 사항이어야합니다. 좋은 방침은 매번 릴리스하기 전에 데이터베이스를 디 컴파일하는 것입니다.

  1. 디 컴파일 바로 가기를 만듭니다 . "/ decompile"스위치를 사용하여 데이터베이스를로드합니다.

    1. 데이터베이스 파일을 마우스 오른쪽 단추로 클릭하십시오. 복사 선택
    2. 탐색기 창에서 마우스 오른쪽 버튼을 클릭하고 "바로 가기 붙여 넣기"를 선택하십시오.
    3. 오른쪽 클릭하여 바로 가기를 선택하고 "속성"
    4. 대상 상자에서 줄의 끝으로 이동하여 추가 /decompile
    5. 확인을 클릭하여 바로 가기를 닫습니다.
  2. Shift 키를 사용하여 데이터베이스 열기.
    Shift 키를 누른 상태에서이 바로 가기를 두 번 클릭합니다. 이렇게하면 자동 실행이 데이터베이스 내에서 실행되지 않습니다. 탐색 창으로 바로 가야합니다.

  3. 데이터베이스 압축 및 복구. 데이터베이스가로드되면 압축 및 복구 버튼을 클릭해야합니다.

    1. Tools Ribbon에서 Compact 및 Repair Database 단추를 찾으십시오.
    2. Shift 키를 누르고 있습니다. 압축 및 복구 버튼을 누른 채로 누르고 계십시오.
  4. 데이터베이스 다시 컴파일

    1. VBA 창으로 이동 (Ctrl + G)
    2. 메뉴에서 Debug -> Compile을 선택하십시오.

이것은 완전한 디 컴파일 프로세스입니다. 일반적으로 모든 액세스 충돌 또는 이상한 양식 동작의 99 %를 수정해야합니다.

컴퓨터 메모리 테스트

충돌이 무작위이거나 산발적이라면이 단계를 수행하십시오. 데이터베이스를 실행할 때마다 충돌이 발생하면이 단계는 문제를 해결하지 않습니다 (처음에는 손상된 메모리가 손상이 발생한 이유 일 수 있음).

운영 체제 외부에서 부팅하고 여러 단계를 실행하는 메모리 테스터를 사용하십시오. MemTest86 (상업용)과 MemTest86 + (개방형 소스)

테스트를 시작하고 근무 시간 중에 실행하십시오. 그 이유는 전원 회로의 노이즈와 같은 건물의 다른 요소로 인해 메모리 오류가 발생할 수 있으므로 변수를 동일하게 유지하려고하기 때문입니다.

메모리 오류가있는 경우 컴퓨터의 잘못된 메모리 또는 다른 요인으로 인한 것인지 확인해야합니다. 그러나이 문서의 범위를 벗어납니다.

양식에서 이진 데이터 제거

때로는 충돌이 단일 양식이나 보고서에서 끊임없이 발생하거나 인쇄 할 때만 발생합니다. 양식 / 보고서 내의 이진 데이터가 손상되었을 수 있습니다.

양식 / 보고서 개체를 텍스트로 저장 문서화되지 않은 기능이 두 가지 있습니다. Application.SaveAsText 및 Application.LoadFromText. 이 함수를 사용하여 양식 / 보고서 정의를 내보내고 정의를 정리 한 다음 다시 가져올 수 있습니다.

  1. 계속하기 전에 데이터베이스를 백업하십시오.
  2. VBA 직접 실행 창으로 이동 (Ctrl + G)
  3. Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" (양식 / 보고서의 이름으로 MyForm 바꾸기, 수정중인 손상된 보고서 인 경우 acReport 사용)
  4. 데이터베이스 창 내에서 원래 양식 항목의 이름을 바꿉니다 (예 : MyForm.Bak로 이름 바꾸기).

양식 / 보고서 정의 파일 정리

  1. 메모장에서 내 보낸 파일 (예 : MyForm.txt)을 엽니 다.

  2. "Checksum ="행 삭제 (3 행에 있어야 함)

  3. 이진 데이터 지우기

    1. 바이너리 데이터 블록을 확인하십시오. 파일을 살펴보면 "Parameter = Begin"로 시작하는 줄이 표시됩니다. 이 라인들 다음에는 인코딩 된 바이너리 데이터 라인이 있습니다. 마지막으로 이진 블록은 "끝"으로 만 구성된 줄로 끝납니다. 이진 데이터 블록에는 첫 번째 행 (Begin 문 포함)과 마지막 행까지의 모든 행 (End Statement 포함)이 포함됩니다.

      참고 :이 모든 블록은 양식 컨트롤 정의 이전에 나타납니다.

    2. 다음 매개 변수에 대한 2 진 데이터 블록을 h 제하십시오.

      • 이름 맵
      • PrtMip
      • PrtDevMode
      • PrtDevNames
      • PrtDevModeW
      • PrtDevNamesW
  4. 다른 문제를 찾으십시오. 파일을 여는 동안 파일의 나머지 부분을 스크롤하여 특히 VBA 모듈 코드의 눈에 띄는 것을 찾으십시오. 당신은 나머지 부분에서 튀어 나와서 부패 할 수있는 것을 찾고있을 것입니다.

  5. 파일을 저장하십시오.

폼 / 보고서를 Access 및 Test에 다시로드하십시오.

  1. 폼을 다시 Access에로드하십시오.
    • Access에서 바로 가기 창 (Control + G)
    • 형식 Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
    • 디 컴파일 / 컴팩트 리커버리 / 리 컴파일 (문서 내의 다른 예 참조)
    • 테스트 할 양식 / 보고서를 엽니 다. 바라건대 모든 것이 지금 일하고 있기를 바랍니다.
    • 오래된 손상된 양식 삭제 (예 : MyForm.bak)

앞으로이 부패를 방지하십시오.

보고서 / 양식 내의 손상된 이진 데이터의 가장 일반적인 원인은 여러 컴퓨터 / 사용자가 별도의 복사본이있는 대신 동일한 데이터베이스 클라이언트 파일을 사용하는 경우입니다. 이것이 각 사용자가 자신의 데스크톱에서 자신이 실행하는 클라이언트 파일을 가져야하는 이유입니다.

"OLE 개체"필드를 제거하십시오.

이미지 나 다른 데이터가 Access 자체에 OLE 객체로 저장되어 있다면 더 나은 접근 방식을 찾아야합니다. OLE 데이터가 저장되면 저장되는 컴퓨터의 소프트웨어 (및 소프트웨어 버전)에 따라 저장됩니다. 다른 컴퓨터가 OLE 객체 데이터를 양식에 표시하려고하지만 정확한 소프트웨어 / 버전이 설치되어 있지 않은 경우 응용 프로그램이 중단되는 경우가 많습니다.

이미지 데이터를 저장하는 경우 더 나은 방법은 파일 이름을 저장하고 이미지를 표준 위치에 저장하는 것입니다. 최신 버전의 액세스에는이를 사용하기위한 기본 컨트롤이 있습니다.

전체 데이터베이스 재 구축

이것은 많은 작업이므로 다른 모든 옵션을 모두 사용한 후 최후의 수단으로 사용하십시오. 서로 다른 시스템의 다른 사용자에 대해 문제점이 발생하는 경우에만이 작업을 수행하면됩니다. 모든 사용자에 대해 발생하지 않으면 손상된 데이터베이스 컨테이너가 아닐 가능성이 큽니다.

바이너리 데이터 제거 단계와 마찬가지로 데이터베이스를 처음부터 다시 작성합니다. 이 과정은 약간의 의식주이지만 가능한 부패를 "보존"하지 않도록 세심한주의를 기울이면 그 과정이 매우 효과적입니다.

새 액세스 데이터베이스 컨테이너를 만듭니다.

  • Access의 File Tab에서 "New"를 선택할 수 있습니다. 새 빈 데이터베이스를 ACCDB 형식으로 만듭니다.

모든 객체를 새 컨테이너로 이동하십시오.

개체를 이동하는 접근에서 가져 오기 / 내보내기 기능을 사용하지 마십시오, 단순히 클릭하고 드래그하지 않습니다. 이렇게하면 손상된 항목을 새 컨테이너로 복사 할 수 있습니다.

테이블 :

  • 이전 액세스 컨테이너의 각 테이블에 대해 새 컨테이너에 새 테이블을 만듭니다.
  • 디자인보기에서 필드 정의를 복사 / 붙여 넣기하십시오.
  • 두 데이터베이스에서 테이블 속성이 일치하는지 확인하십시오
  • 모든 데이터 매크로를 이동하십시오 (이를 수행하는 방법은 매크로 섹션 참조).
  • 데이터를 이동하려면 이전 데이터를 XML 또는 CSV로 내 보낸 다음 해당 형식에서 가져옵니다.

검색어 :

  • 각 쿼리를 SQL보기로로드하십시오.
  • SQL 텍스트를 복사 / 붙여 넣기하십시오.
  • 새 데이터베이스에 붙여 넣습니다.
  • 쿼리 속성을 비교하여 일치하는지 확인하십시오.

양식 / 보고서 :

  • 각 양식 / 보고서에 대해 Application.SaveAsText 함수를 사용하여 양식 / 보고서를 텍스트 파일로 내 보냅니다.
  • 이진 데이터 제거 (이 프로세스에 익숙해 지려면 양식 설명서의 이진 데이터 제거 참조)
  • Application.LoadFromText 함수를 사용하여 개체를 새 데이터베이스로 다시 가져옵니다.

매크로

매크로를 이동하는 세 가지 방법이 있습니다.

  1. 새 데이터베이스 컨테이너에서 수동으로 각 매크로를 다시 작성하십시오.
  2. acMacro 매개 변수와 함께 Application.SaveAsText / Application.LoadFromText 메서드를 사용합니다.
  3. 각 매크로의 매크로 정의 복사 / 붙여 넣기
    • 모든 매크로 요소를 선택하려면 모두 (Ctrl + A)를 선택하십시오. 그런 다음 복사 (Ctrl + C).
    • 빈 메모장 문서를 열고 매크로 XML을 붙여 넣기 (Ctrl + V)하십시오.
    • 새 데이터베이스 컨테이너에 새 빈 매크로를 만듭니다.
    • 메모장에서 모든 텍스트 (Ctrl + A)를 선택하십시오. 그런 다음 복사 (Ctrl + C)
    • 빈 매크로에서 붙여 넣기 (Ctrl + V)를 누릅니다. 매크로가 나타납니다. 저장해.

모듈

  • 각 모듈에 대해 모든 코드 (Control + A)를 선택하고 새 데이터베이스 컨테이너에 붙여 넣으십시오 (Control + V).
  • 데이터베이스 속성 (VBA 창에서 도구 -> 클라이언트 속성으로 이동)을 확인하십시오.

데이터 매크로

각 데이터 매크로에 대해 SaveAsText / LoadFromText 메서드를 사용합니다.

  1. VBA 직접 실행 창으로 이동 (Ctrl + G)
  2. Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" (MyTableName을 데이터 매크로가 포함 된 테이블의 이름으로 바꿉니다)
  3. 파일에 손상 징후가 없는지 검토합니다.
  4. 새 데이터베이스 컨테이너에서 Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" 사용하여 정의를로드하십시오.

앞서 언급했듯이, 이것은 많은 작업이지만 결과가 있습니다. 이 방법은 Access 97 데이터베이스를 2000으로 마이그레이션하거나 Access 2000 데이터베이스를 2003으로 마이그레이션 할 때도 사용해야합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow