Access 개체에 대한 디자인 변경 내용을 저장하려면 배타적 잠금이 필요합니다.

원래 KB 번호: 283228

참고

고급: 전문 코딩, 상호 운용성 및 다중 사용자 기술이 필요합니다. 이 문서는 Microsoft Access 데이터베이스(.mdb 및 .accdb)에만 적용됩니다.

증상

디자인 보기에서 도구 모음을 사용자 지정하거나 Microsoft Access 양식, 보고서, 매크로 또는 모듈을 열려면 다음 메시지가 표시됩니다.

현재 데이터베이스에 대한 단독 액세스 권한은 없습니다. 변경 작업을 진행하는 경우 나중에 저장하지 못할 수 있습니다.

Access 양식, 보고서, 매크로 또는 모듈에 적용한 디자인 변경 내용을 저장하려고 하면 다음 메시지가 표시됩니다.

현재 데이터베이스에 대한 단독 액세스 권한은 없습니다. 디자인 변경 내용은 저장되지 않습니다.

새 데이터 액세스 페이지를 저장하려고 하면 다음 메시지가 표시됩니다.

데이터베이스를 단독으로 잠글 수 없으므로 이 데이터 액세스 페이지에 대한 링크를 만들 수 없습니다.

원인

  • 디자인 보기에서 폼, 보고서, 매크로, 모듈 또는 명령 모음을 열려고 합니다.
  • 다른 사용자가 동일한 데이터베이스를 열어 두는 동안 이러한 개체 유형 또는 새 페이지 링크 중 하나에 디자인 변경 내용을 저장하려고 합니다.

이러한 개체 형식에 대한 디자인 변경 내용을 저장하려면 Access에서 데이터베이스에 대한 배타적 잠금을 가져올 수 있어야 합니다.

해결 방법

여러 개발자가 동시에 Access 애플리케이션을 디자인하는 경우 Microsoft Access용 Microsoft Visual SourceSafe 추가 기능을 사용하여 소스 코드 제어를 구현해야 합니다. 또는 각 개발자에게 데이터베이스의 로컬 작업 복사본을 배포해야 합니다. 이러한 각 옵션에 대한 설명은 다음과 같습니다.

소스 코드 제어 구현

Microsoft Access Visual SourceSafe Add-In 개발 중인 동안 Access 애플리케이션을 소스 코드 제어에 배치할 수 있습니다. 애플리케이션을 소스 코드 제어에 배치하면 시간이 지남에 따라 애플리케이션에 적용된 변경 내용을 추적하고 저장할 수 있습니다. Microsoft Visual SourceSafe 사용하여 개체의 기록을 검토한 다음 이전 버전의 개체로 되돌리기 수 있습니다. Microsoft Access 애플리케이션에서 개체를 검사 수정하거나 로컬 복사본에 새 개체를 만든 다음 소스 코드 제어에서 기본 데이터베이스로 다시 검사 수 있습니다. Microsoft Access Visual SourceSafe Add-In Microsoft Office XP Developer에서 사용할 수 있습니다. Microsoft Access Visual SourceSafe 추가 기능을 사용하려면 Microsoft Office XP 개발자도 별도로 사용할 수 있는 Microsoft Visual SourceSafe 설치해야 합니다.

개별 작업 데이터베이스 사용

구현할 수 있는 또 다른 옵션은 데이터베이스 애플리케이션의 master 복사본을 중앙 위치에 유지한 다음 각 개발자의 컴퓨터에서 데이터베이스의 개별 작업 복사본을 사용하는 것입니다. 각 개발자는 데이터베이스의 로컬 작업 복사본에서 애플리케이션의 개별 부분을 개발합니다. 개발자가 데이터베이스 애플리케이션에서 개체를 변경하려는 경우 master 데이터베이스에서 로컬 작업 데이터베이스로 개체를 가져옵니다. 그런 다음 개발자는 로컬 작업 데이터베이스의 개체에 필요한 변경 내용을 적용하고 개체를 저장합니다. 개발자가 변경 내용을 master 데이터베이스에 커밋할 준비가 되면 개체를 master 데이터베이스로 내보내 원래 개체를 덮어씁니다.

이 방법을 사용할 때의 단점 중 하나는 여러 개발자가 동시에 동일한 개체에서 로컬로 작업하는지 확인할 방법이 없다는 것입니다. 개발자가 개체를 master 데이터베이스로 내보내면 개발자는 다른 개발자가 master 데이터베이스에 커밋한 변경 내용을 무의식적으로 덮어쓸 수 있습니다.

추가 정보

폼, 보고서, 새 페이지 링크, 매크로, 모듈 및 명령 모음과 같은 Access 관련 개체에 대한 디자인 변경 내용을 저장하려면 Access 2002는 저장 작업 중에 데이터베이스를 단독으로 잠글 수 있어야 합니다. 테이블, 쿼리 및 관계는 Microsoft Jet 관련 개체이므로 이 제한에 속하지 않습니다. Microsoft는 다음과 같은 여러 가지 이유로 Access 2002에서 이 요구 사항을 사용합니다.

  • 다른 Visual Basic Environment 클라이언트 애플리케이션과 일관성을 제공합니다.
  • Jet 데이터베이스 엔진에 대한 종속성을 중지합니다.
  • 액세스 관련 개체의 안정성을 향상시킵니다.

다른 Visual Basic 환경 클라이언트 애플리케이션과 일관성 제공

Access 2002는 Visual Basic 환경을 호스트하므로 Microsoft Access에서 사용하는 저장 모델은 Visual Basic 환경을 호스트하는 다른 애플리케이션과 일치해야 합니다. Visual Basic 환경은 소스 코드 제어에 속하지 않는 Visual Basic 프로젝트의 단독 편집 및 저장만 허용합니다. 이는 Visual Basic 6.0 및 Visual Basic 환경을 호스트하는 모든 Office 애플리케이션에서도 마찬가지입니다.

Jet 데이터베이스 엔진에 대한 종속성을 중지합니다.

Access는 Microsoft Access 프로젝트(.adp) 파일 및 Microsoft Access 데이터베이스(.mdb)를 만드는 기능을 제공합니다. 개발자는 Access 프로젝트를 사용하여 Microsoft SQL Server Microsoft Jet의 다른 데이터베이스 엔진으로 사용할 수 있습니다. 이전에는 모든 Access 특정 개체(양식, 보고서, 매크로, 모듈 및 명령 모음)가 스토리지용 Jet 데이터베이스 엔진에 종속되었습니다. 이러한 개체는 Microsoft Jet 데이터베이스의 액세스 관련 시스템 테이블에 저장되었습니다. Access에서 Microsoft jet 대신 Microsoft SQL Server 사용할 수 있으므로 Microsoft는 Jet 데이터베이스 엔진을 사용하지 않는 Access 관련 개체에 대한 스토리지 메커니즘을 개발해야 했습니다.

액세스 관련 개체의 안정성 향상

프로젝트 스토리지 모델은 액세스 관련 개체 및 Visual Basic 프로젝트의 안정성을 향상시킵니다. Visual Basic for Applications 소스 코드 제어 없이 Visual Basic 프로젝트의 다중 사용자 편집을 허용한 적이 없습니다. Microsoft Access 95 및 Microsoft Access 97은 다중 사용자 환경의 프로젝트 변경 내용을 Visual Basic for Applications 숨긴 다음 나중에 프로젝트에 병합하여 이 제한을 우회할 수 있습니다. 그러나 Visual Basic 프로젝트의 안정성에 영향을 미칠 가능성이 있었습니다. 따라서 프로젝트에 편집기가 하나만 있는지 확인하기 위해 Access 관련 개체를 디자인할 때 Microsoft Access에는 배타적 잠금이 필요합니다.

다중 사용자 환경에서 Access 개체 편집

사용자는 전용 또는 공유 사용을 위해 데이터베이스를 열 수 있으므로 Access에서 표시되는 저장 동작은 사용자가 데이터베이스를 연 방법 및 여러 사용자가 현재 데이터베이스에 액세스하고 있는지 여부에 따라 달라집니다.

개발자가 전용으로 데이터베이스를 열면 개발자가 읽기/쓰기 액세스를 위해 데이터베이스를 열 수 있고 개체의 디자인을 수정할 수 있는 올바른 권한이 있는 경우 개발자는 Access 관련 개체의 디자인을 저장할 수 있습니다.

사용자가 공유 사용을 위해 데이터베이스를 열면 사용자가 읽기/쓰기 액세스를 위해 데이터베이스를 열 수 있고, 개체의 디자인을 수정할 수 있는 올바른 권한이 있고, Access에서 데이터베이스에 대한 배타적 잠금을 얻을 수 있는 경우 Access 관련 개체의 디자인을 저장할 수 있습니다.

잠금 승격

데이터베이스를 사용할 수 없도록 Access는 Jet 데이터베이스 엔진의 연결 제어 기능을 사용하여 사용자의 공유 잠금을 배타적인 것으로 승격합니다. 사용자가 디자인 보기에서 폼, 보고서, 매크로 또는 명령 모음을 여는 즉시 Access에서 공유 잠금을 배타적 잠금으로 승격하려고 시도합니다. Access는 사용자가 나중에 Access에서 배타적 잠금을 얻을 수 없기 때문에 사용자가 저장할 수 없다는 것을 발견하기 위해 여러 디자인을 변경한 시나리오를 방지하기 위해 현재 잠금 승격을 시도합니다. 사용자가 디자인 보기에서 개체를 열자마자 잠금 승격을 시도하면 사용자가 디자인을 변경하기 전에 단독 잠금을 가져올 수 없는 경우 사용자에게 경고할 수 있습니다. 디자인 보기에서 모듈을 열 때 Access에서 잠금 승격을 시도하지 않습니다. 그러나 사용자가 데이터베이스의 모듈을 편집하는 즉시 잠금 승격을 시도합니다.

Access는 사용자가 모든 더티 개체를 저장하거나 삭제하고 디자인 보기에서 다른 개체가 열려 있지 않을 때까지 배타적 잠금을 유지합니다. 그런 다음 데이터베이스가 원래 공유 용도로 열려 있는 경우 Access에서 공유로 잠금을 다시 강등합니다.

사용자가 디자인 보기에서 개체를 열 때 Access에서 잠금을 배타로 승격할 수 없는 경우 Access는 사용자에게 다음과 같은 메시지를 표시합니다.

현재 데이터베이스에 대한 단독 액세스 권한은 없습니다. 변경 작업을 진행하는 경우 나중에 저장하지 못할 수 있습니다.

이 경고 메시지에 따라 Access는 디자인 보기에서 개체를 열고 사용자가 디자인을 변경할 수 있도록 합니다. 사용자가 개체를 저장하려고 하면 Access에서 공유 잠금을 배타적 잠금으로 승격하려고 시도합니다. 잠금 승격에 성공하면 Access는 개체를 저장하고 사용자가 다른 모든 더티 개체를 저장하거나 삭제할 때까지 배타적 잠금을 유지하며 디자인 보기에서 개체를 열어 두지 않습니다. 잠금 승격에 실패하면 사용자는 다음 메시지를 받습니다.

현재 데이터베이스에 대한 단독 액세스 권한은 없습니다. 디자인 변경 내용은 저장되지 않습니다.

사용자가 더티 개체를 닫고 변경 내용을 저장하려고 하면 Access에서 개체를 닫고 디자인 변경 내용을 삭제하거나 개체를 열어 저장하지 않은 상태로 두는 옵션을 사용자에게 표시합니다.

동작을 재현하는 단계

  1. 동일한 컴퓨터에서 두 개의 Microsoft Access 인스턴스를 시작합니다.

  2. 두 인스턴스에서 샘플 데이터베이스 Northwind.mdb 엽니다.

  3. Microsoft Access의 첫 번째 instance 디자인 보기에서 고객 양식을 엽니다.

    다음과 같은 메시지가 표시됩니다.

    현재 데이터베이스에 대한 단독 액세스 권한은 없습니다. 변경 작업을 진행하는 경우 나중에 저장하지 못할 수 있습니다.

  4. 확인을 클릭하여 메시지를 지웁 수 있습니다.

    폼이 디자인 보기에서 열립니다.

  5. 양식에 텍스트 상자 컨트롤을 추가합니다.

  6. 파일 메뉴에서 저장을 클릭합니다.

    다음과 같은 메시지가 표시됩니다.

    현재 데이터베이스에 대한 단독 액세스 권한은 없습니다. 디자인 변경 내용은 저장되지 않습니다.

  7. 확인을 클릭하여 메시지를 지웁 수 있습니다.

  8. 컴퓨터에서 Access의 두 번째 instance 닫습니다.

  9. Access의 첫 번째 instance 양식을 다시 저장합니다.

    양식이 성공적으로 저장됩니다.