2012-10-10 2 views
1

참고 : 나는 복잡한 데이터베이스를 사용하고 있으므로 명확하게하기 위해 아래의 설정을 단순화했습니다.중복되지 않은 두 번째 테이블을 기반으로 한 테이블의 데이터를 필터링하십시오.

나는 약간의 복잡한 질문이기 때문에 질문에 제목을 붙이는 방법과 조금 어려움을 겪었습니다. "제품"라는 테이블과 테이블 사이에 일대 다 관계를 포함 I 2010 데이터베이스 액세스를

: 나는

첫번째 배경의 비트 .... 충분히 정확 희망 "데이터 세트"(즉, 제품이 많으며 각 제품마다 여러 개의 데이터 세트가 있음)가 있습니다. 각 필드에는 autonumber 키 필드 (각각 p_ID 및 d_ID)와 기타 여러 필드가 있습니다.

"제품"테이블에 기반한 sub_Products와 "데이터 세트"테이블에 기반한 sub_Datasets의 두 가지 하위 형식이있는 양식이 있습니다 (frm_Main이라고 함). 기본 양식에서 [sub_Products]! [p_ID]에 연결된 ctrl_SelectedProduct 컨트롤을 사용하여 sub_Products의 어떤 레코드가 선택되어 있는지/포커스가 있는지 확인하고 sub_Datasets 하위 폼이이 컨트롤에 연결되어 데이터 세트 레코드 만 표시되도록합니다. 선택한 제품 레코드에 속합니다.

기본 폼에는 하위 폼의 데이터를 필터링하는 데 사용하는 여러 컨트롤이 있습니다. 예를 들어 컨트롤 ctrl_Category가 있습니다. 사용자가 컨트롤의 값을 변경할 때 sub_Products의 레코드를 ctrl_Category에서 선택된 것과 같은 p_Category 값을 가진 레코드로만 제한하는 필터가 적용되도록이 컨트롤을 코딩했습니다. 컨트롤이 비어 있으면 모든 레코드가 표시됩니다. 이 모든 기능은 Products 테이블의 필드를 기반으로 필터링을 수행 할 때 유용합니다.

지금 문제 :

내 문제는 내가 또한 데이터 집합 테이블의 필드를 기반으로 필터링 할 수 있도록하려는 것입니다. 예를 들어, Dataset에는 d_Status라는 필드가 있습니다.

sub_Products는 assotiated 데이터 집합 기록이 만 제품 레코드를 표시하도록 필터링 할 것) 1 (또는 기록 :이 기반으로 사용자가 제어 (ctrl_Status)에서 상태를 선택 할 수 있도록하려면, 그리고 진단 제품 기록이 여과 sub_Products 선택한 경우)간에 동일한 d_Status을 갖는다는 ctrl_Status 다음

2)

에서 선택하고, sub_Datasets만을 선택 하였다간에 동등한 d_Status을 갖는 데이터 집합의 레코드를 표시 할 in ctrl_Status

2 부 방법을 알고 있습니다. 그러나 파트 1을 어떻게 작동 시킬지 전혀 모르겠습니다. sub_Products는 현재 d_Status 필드가없는 Products 테이블을 기반으로하므로 해당 필드를 기반으로 필터링하지 못합니다. 따라서, 첫 번째 단계는 내 설정을 변경하여 sub_Products가 두 테이블을 결합한 쿼리 (또는 적어도 d_Status 필드 추가)를 기반으로하도록 가정합니다.

그러나 그렇게하면 제품 기록이 중복됩니다. 쿼리의 고유 값 속성을 사용할 수 없습니다. 두 개의 데이터 집합 (상태가 '현재'이고 상태가 '보관 됨'인 데이터 집합)이있는 경우 복제본으로 간주되지 않으며 제품 정보가 있기 때문입니다. 두번. 상태 필드가 표시되지 않으면 처음에는 고유 한 제품 만 표시되지만 표시되지 않은 필드를 기반으로 필터를 적용 할 수는 없습니다.

Group By 기능을 사용하기 위해 총계 쿼리에서 sub_Products를 기반으로 시도했지만 올바르게 작동하지 못했습니다. 그룹화 기준으로 10 개의 필드 만 가질 수 있고 내 제품 테이블에 sub_Products에 표시된 10 개 이상의 필드가 있기 때문에 최선의 솔루션이라고 생각하지 않아도됩니다.

지금은 서클에서 돌아 다니며 여기에서 시도해 볼 것을 잃어 버렸습니다. 도와주세요!

답변

0

다음과 같이 추가 할 수 없습니까?

Private Sub ctrl_Category_AfterUpdate() 
    Form_frm_Main.Recordsource = "Select * from Products where p_ID IN(" & _ 
           "Select p_ID from Datasets where d_Status = " & _ 
           Me!ctrl_Category.Value & ")" 
End Sub 

다른 방법으로 다른 하위 양식의 부모를 통해 하위 양식에 액세스 할 수 있습니다. 이 아닌 작업 조각이 당신에게 아이디어를 제공하는 것입니다 :

Me.Parent.otherChildFormName.Form.Recordsource = whatever 
+0

감사 다니엘! 필터를 적용하는 대신 레코드 소스를 변경하는 것이 핵심이었던 것 같습니다. 물론, 이제는 Audit Trail 코딩을 변경해야합니다 (레코드 소스를보고 소스 테이블을 가져 오는 중입니다).하지만 하위 형식을 완전히 재 설계하는 것보다 낫습니다! – ribs

관련 문제