2010-07-29 5 views
1

kind of design을 사용하여 junction table에서 레코드를 추가 및 삭제하는 기능을 만들고 싶습니다.두 개의 상호 배타 목록 (2 개의 목록 상자) 사이에 MS 액세스 정션 테이블 삽입/삭제

사례는 직원을 편집하고 취할 수있는 시험을 선택할 때입니다. 왼쪽 목록 상자에는 자격이없는 시험 (어쨌든)과 오른쪽 목록 상자에서 시험에 응시할 수 있습니다.

표는 다음과 같이이다 :

TABLE EmpExam 
(
    EmpID, 
    ExamID 
) 

EmpID는 항상 알려진 것이지만, ExamID는 왼쪽 목록 상자에서 선택 될 것이다. 오른쪽 목록 상자의 레코드는 삭제하기 위해 EmpIDExamID을 모두 가져야합니다.

양식을 닫을 때까지 즉시 삭제하거나 삽입 할 필요가 없습니다 (양식을 닫을 때까지 기다릴 수 있음).

Access에서이를 수행하기위한 좋은 표준 방법이 있습니까?

답변

0

원시 SQL을 실행하는 Click 메서드에서 VBA On 메서드를 트리거하는 추가 단추와 제거 단추가있는 두 개의 목록 상자가 사용되었습니다.

If IsNull(cboInEligible.Column(1)) 
    Exit Sub 
End If 

CurrentDB.Execute ("INSERT INTO tblEmpExam (ExamID, EmpID) " & _ 
        "VALUES (" & ExamID & ", " & lstInEligible.Column(1) & ")") 

lstInEligible.Requery 
lstEligible.Requery 

이 삭제 쿼리가 유사하게 수행됩니다

방법은 다음과 같이 보입니다.

두 개의 목록 상자는 상호 배타적입니다.

SELECT EmpID, EmpName 
FROM Employee 
WHERE EmpID NOT IN (SELECT EmpID FROM tblEmpExam WHERE ExamID = [txtExamID]); 

txtExamID는 숨겨진 (그러나 디자이너에게 분명) 내가 제어를 통해 제외 또는 절대 이름을 통해 폼의 ExamID을 참조 할 수 없기 때문에 폼에서 제어 할 수 있습니다.

다른 목록 상자는 EmpID NOT IN 대신 EmpID IN이 독점적입니다.

1

코드를 사용하여 테이블에 항목을 추가 한 다음 코드를 사용하여 목록 상자를 삭제해야하는 이유는 무엇입니까?

원하는대로 하위 양식이 일반적인 솔루션입니다. 또한 하위 폼의 레코드 집합 복사본을 사용할 수 있습니다. 그 설정에는 datetime 필드가 있어야합니다. 또한 ExamID가 고유하고 계단식 삭제가 활성화 된 경우 주 테이블에서 삭제하면 하위 테이블에서 삭제됩니다.

+0

Exam 테이블에서 삭제하면 EmpExam 항목도 삭제된다는 뜻입니까? 그렇다면 그것은 내가 의도하고 설정 한 것입니다. 또한, 당신이 제안하는 것에 대한 좋은 지침서가 있습니까? – Nitrodist

+0

예, http://www.granite.ab.ca/access/cascadeupdatedelete.htm 경고 메시지가 표시되지만이 경우 적합 할 수 있습니다. 다음은 자습서입니다. http://office.microsoft.com/en-us/access-help/delete-one-more-records-from-an-access-database-HA001173951.aspx – Fionnuala

+0

실행하면 삭제 쿼리를 사용하면 둘 이상의 테이블에서 삭제하려고한다는 경고를받지 못할 수도 있습니다. – Fionnuala

관련 문제