2010-04-22 4 views
2

MS Access 2003 레코드 원본이 INNER JOIN이 포함 된 쿼리와 동일한 양식이 있습니다. 조인은 위치 테이블과 컨테이너 테이블 사이에 있습니다. 컨테이너는 특정 위치에 저장된 객체이며 각 위치 및 컨테이너는 ID 값으로 지정됩니다.쿼리를 기반으로 폼을 삭제할 때 어떤 테이블이 영향을 받습니까?

SELECT DISTINCTROW Container.Container_ID, Location.Location_ID 
FROM Location INNER JOIN Container 
ON Location.[Location_ID] = Container.[Location_ID] 

내가 알아 내려고하는 것은 .... 영향을받는 위의 쿼리를 기반으로 양식에서 양식 탐색 컨트롤을 사용하여 레코드를 삭제할 때? 컨테이너 테이블과 위치 테이블의 레코드가 삭제되었거나 위치 테이블에 있습니까?

+0

여러 개의 테이블이있는 레코드 소스에서 삭제를 허용하는 경우 디자인 오류가 있다고 생각합니다. 작은 변화만으로도 새로운 환경에서 다르게 행동 할 수 있습니다. DISTINCTROW를 사용하여 다중 테이블 레코드 소스를 편집 가능하게 만드는 것이 좋습니다. 하지만 올바른 데이터가 삭제되었는지 확인하기 위해 코드에서 삭제 작업을 수행합니다. –

+0

당신의 아이디어가 타당하다고 생각합니다. 아마도 가장 좋은 옵션은 다른 답변 중 하나 인 "한스 업 (HansUp)"사용자가 제안한 것일 것입니다. – webworm

답변

1

, 당신은 컨테이너에서 현재 행을 삭제하고 변경되지 않은 위치를 떠날 것이다.

그러나 관계를 추가하고 거기에 저장된 컨테이너가있는 위치를 삭제할 수 없도록 참조 무결성을 적용해야한다고 생각합니다. 그렇지 않으면 더 이상 존재하지 않는 Location_ID를 참조하는 컨테이너 레코드로 끝날 수 있습니다. 관계는이 양식 및 쿼리에 도움이되지 않을 수 있지만 다른 상황의 실수를 막을 수 있습니다.

어떤 레코드가 어디에서 삭제 될지 쉽게 이해할 수있는 양식을 디자인하는 다른 방법이 있습니다. 위치에 기본 폼을 기반으로하고 컨테이너를 기반으로하는 하위 폼을 포함 할 수 있습니다. 속성에서 Location_ID를 링크 마스터/하위 필드로 설정합니다. 그런 다음 기본 폼에 표시된 Location_ID에 대해 해당 위치에 저장된 모든 컨테이너가 하위 폼에 표시됩니다. 하위 폼을 사용하여 원하는 컨테이너를 삭제하십시오.

+0

컨테이너 테이블의 행이 삭제되고 위치의 레코드가 삭제되지 않는다는 것을 어떻게 결정 했습니까? 컨테이너 테이블이 왜 영향을 미치는지 이해하려고 노력하고 있습니다. 디자인 제안을 주셔서 감사합니다. 이 양식은 다른 사람이 작성한 것으로, 전에 이런 상황에 직면하지 않았습니다.과거에는 삭제가 허용 될 때 양식 레코드 원본을 단일 테이블로 유지했습니다. DELETE 문을 생성하고 SQL을 통해 실행하지 않는 한. 도와 주셔서 감사합니다. – webworm

+0

@webworm DISTINCTROW가 어떻게 당신의 상황에 영향을 주 었는지 알고 싶었습니다. 그래서 테이블, 쿼리 및 폼을 만들어 알아 냈습니다. 내 대답은 내 테스트를 기반으로했다. 당신과 마찬가지로, 나는 하나 이상의 테이블 소스에서 삭제를 기반으로하는 것을 선호한다. 양식을 재 설계하지 않기로 결정했다면 어쨌든 관계를 추가하십시오. 그것은 좋은 연습입니다, IMO. – HansUp

+0

설명해 주셔서 감사합니다. 다중 테이블 레코드 소스를 사용하면 재미있는 일이 발생합니다. – webworm

0

테이블간에 관계가 설정되어 있는지 여부에 따라 달라지며 해당 관계에 대해 "계단식 관련 테이블 삭제"설정이 켜져 있습니다.

관계가 있고 계단식 삭제가 설정되어 있으면 연결된 테이블의 레코드가 확실히 삭제됩니다.

참조 무결성이 두 테이블간에 적용되는 경우 관련된 모든 하위 레코드를 먼저 삭제하지 않고 상위 레코드를 삭제하려고하면 Access에서 불만을 표시합니다.

폼에 대한 쿼리에 두 테이블이 모두 있고 삭제가 요청되고 계단식 삭제가 해제되어 있으면 양식에서 어떤 일이 발생하는지 명확하지 않습니다. 그러나 그것은 시험하기에 충분히 쉬울 것입니다. 정의 관계없이

http://office.microsoft.com/en-us/access/ha011739511033.aspx

+0

양식이 위치 및 컨테이너의 두 테이블에서 데이터를 표시하고 있습니다. 내 목표는 위치가 여러 컨테이너를 가질 수 있기 때문에 컨테이너 레코드 만 삭제하는 것이지만 컨테이너는 한 위치 만 가질 수 있습니다. 컨테이너가 위치가 아니라 삭제되었는지 확인하기 위해 레코드 소스 SQL을 변경해야하는지 궁금합니다. – webworm

관련 문제