2017-12-05 6 views
0

예를 들어, 음식을 사용합시다.MS Access Form : 첫 번째 Combobox 값을 사용하여 두 번째 Combobox의 옵션을 필터링 하시겠습니까?

테이블 : 식품

ID || Type || Name 
    1 || Fruit || Apple 
    2 || Fruit || Orange 
    3 || Veggie || Pea 
    4 || Veggie || Corn 

콤보 1 :
행 소스 (SQL) TypeCB : 나는 "CountofID"를 사용

SELECT DISTINCT 
    Count([Food].ID) AS CountOfID, 
    [Food].Type 
FROM [Food] 
ORDER BY [Food].Type; 

(이유는이 고유를 얻을 수있다 값을 입력하십시오. 그렇지 않으면 ID가 고유하므로 반복됩니다)

이제는 첫 번째로 완벽하게 작동하지만 다음 ComboBox로 값을 가져 오려고하면 두 번째 콤보 상자가 비어 있습니다. 첫 번째 콤보 박스로 채워진 폼을 새로 고침해도 문제가 해결되지 않습니다.

콤보 2 : NameCB
행 소스 (SQL) :

SELECT 
    Count([Food].ID) AS CountOfID, 
    [Food].Name 
FROM [Food] 
HAVING ((([Food].Type)=[Forms]![Food Form]![TypeCB].[SelText])); 

이 데이터를 잡기 위해 또 다른/더 좋은 방법이 있나요?

+0

왜 이러한 검색어에 Count가 포함됩니까? Distinct를 반환하기 만하면됩니다. 첫 번째 콤보 상자 값이 Count 계산 값이면 두 번째 콤보 상자의 필터 조건으로 쓸모가 없습니다. 나는 SelText 속성이 이런 식으로 사용되는 것을 본 적이 없다. 아마 당신이 그것을 제거해야한다고 생각합니다. – June7

답변

1

유형 열만 사용 중이므로 TypeCB의 행 원본에 Count이 필요하지 않습니다. 이 값을 그대로두면 TypeCB의 Bound Column 속성이 2로 설정되어 있으므로 콤보 상자의 값이 CountOfID가 아닌 Type 열에서 선택됩니다.

당신의 NameCB Row Source는 [SelText] 속성을 제외하고는 OK입니다. 변경 : 당신의 TypeCB 콤보 상자의 Bound Column 속성 유형 값이 컬럼에 설정되어

SELECT 
     Count([Food].ID) AS CountOfID, 
     [Food].Name 
    FROM [Food] 
    HAVING ((([Food].Type)=[Forms]![Food Form]![TypeCB])); 

경우,이 값을 얻을 수있는 컨트롤 자체를 참조 할 수 있습니다.

TypeCB 콤보 상자의 After Update 이벤트에 NameCB.Requery()을 추가하면 NameCB 콤보 상자가 새로 고쳐집니다.