2009-04-21 4 views
2

SQL Server 2000 상자에 연결하는 Access 2003 응용 프로그램이 있습니다.레코드를 읽기 전용으로 영구적으로 표시하는 가장 좋은 방법은 무엇입니까?

다른 테이블의 모든 관련 레코드와 함께 레코드를 잠글 필요가있는 테이블이 있습니다. "잠그다"는 것은 클라이언트를 잠금 해제하지 않는 한 클라이언트가 레코드를 편집 할 수 없도록 읽기 전용으로 표시하는 것입니다.

아이디어가 있으십니까?

+1

'잠금'이란 무엇을 의미합니까? 영구적으로 변경을 방지 하시겠습니까? 또는 작업을 수행하는 동안 짧은 시간 동안 다른 사람이 변경되는 것을 방지 할 수 있습니까? –

+1

영구 잠금 장치가 많습니다. 최종 사용자는 일단 잠긴 레코드를 편집 할 수 없어야합니다. 그러나 관리자가 잠금을 해제 할 수있는 방법이 필요합니다. 현재 숨겨진 비트 필드는 레코드가 잠겨있을 때 설정되는 주 테이블에 있지만 관련된 레코드를 잠 그려면 가장 좋은 방법을 결정하는 데 문제가 있습니다. – DoubleJ92

+0

나는 영구적 인 자물쇠가 있다는 것을 분명히하기 위해 질문을 편집했다. 이것을 읽고있는 어떤 사람들은 당신이 행 수준의 임시 잠금을 의미한다고 생각했을 것입니다. 이게 도움이되기를 바랍니다. – JosephStyons

답변

3

데이터베이스 수준에서이 작업을 수행하는 "우아한"방법이 없을 가능성이 많습니다. 하지만 할 수있는 몇 가지 경로가 있습니다.

  1. "잠긴"비트 필드를 각 테이블에 추가하고 해당 값을 상위 "계단식으로"잠글 때.
  2. # 1과 함께 업데이트 및 삭제시 트리거를 추가하고 플래그가 설정된 경우 업데이트를 취소하거나 삭제할 수 있습니다.

내가 생각할 수있는 db 수준에서이를 적용하는 유일한 쉬운 방법입니다.

0

데이터가 SQL Server에 있다고 가정 할 때 가능한 한 먼저 SQL Server 보안을 사용합니다. 일반적으로 테이블에 대한 액세스를 허용하지 않고 SP를 통해 테이블을 제어합니다. SP는 특정 작업의 진행 여부를 결정하는보다 복잡한 논리를 가질 수 있습니다.

옵션이 아니라면 언제든지 트리거를 사용하고 행을 확인하고 업데이트를 거부하거나 삭제할 수 있습니다.

이 고양이를 피할 수있는 방법이 있습니다.

0

그냥 다른 옵션은 거기 밖으로 던져 :

  • 업데이트 트리거
  • 으로 업데이트됩니다 당신의 테이블에 LAST_UPDATED 열을 추가, Locked_Widgets을 테이블을 생성 (또는 무엇이든) 이는 단순히 당신의 기본 테이블의 PK와 LAST_UPDATED 컬럼과 컬럼의 전체 세트는
  • 이 Locked_Widgets에 기본 테이블에서 비 계단식 외래 키를 넣어 Locked_Widgets의 PK를 구성

누군가 행을 갱신하려고 시도하면 트리거가 last_updated 컬럼을 갱신하려고 시도하고 외부 키 제한 조건으로 인해 갱신이 실패하게됩니다.

관련 문제