여러 하위 양식이있는 탭 형식을 사용하는 SQL Server에 대한 액세스 클라이언트가 있습니다. 기본적으로 제품은 기본 폼에서 선택되고 탭은 다른 관련 테이블에 저장된 제품의 다른 속성 (옵션, 색, 눈 등)을 편집/삽입 할 수있는 권한을 부여합니다. 각 하위 양식은 자체 레코드 소스를 사용하지만 제품 번호의 기본 양식과 동기화됩니다.MS Access 여러 개의 OnCurrent 발동 탭 형식
그래서 "where"절에서 제품 번호를 사용하는 쿼리의 데이터를 채우려는 "Options"라고 부르는 하위 폼에 콤보 상자가 있습니다. 그게 내가해야 할 일이야. 내가 어떻게했는지 RowSource를 SQL 문자열과 동일하게 설정하기 위해 Options 하위 형식의 OnCurrent 이벤트를 사용했습니다. 그래도 작동하지만 OnCurrent 이벤트는 Options 하위 폼에 포커스가 있는지 여부에 관계없이 기본 폼에서 새 제품을 선택할 때마다 발생합니다. Options가 포커스를 얻으면 다시 시작됩니다. 그런 다음 옵션에서 데이터 시트 레이아웃을 사용하기 때문에 레코드 원본을 변경하지 않아도 선택한 모든 레코드에 대해 실행됩니다.
비록 작동하지만 불필요한 많은 데이터가 매우 (아주) 원격 SQL Server에 전달됩니다. 그래서, 거기에 전체 하위 폼, 이상적으로 그냥 한 번만, 및 하위 폼 내의 각 레코드에 대해 작동하는 사용할 다른 이벤트가 있습니까? 나는 Got Focus를 시도했지만 결코 해고 된 적이 없다. 그리고 신제품을 선택하면 열기 및로드 이벤트가 발생하지 않습니다 (당연히). 또는 옵션 하위 레코드 소스를 설정해야하는 또 다른 곳이 있습니까?
다음은 이벤트 코드입니다 : 어떤 도움
Private Sub Form_Current()
Dim sql As String
sql = "SELECT O.[OptionID], O.[Caption] FROM ProductOptions AS O WHERE o.[OptionTypeID] in (1,2,8,9) AND o.ProductNumber = "
sql = sql & "'" & Nz(Forms![products main form]!ProductNumber, "99test") & "'"
oidSelect1.RowSource = sql
End Sub
감사합니다. 짐
그래서 내레이션에 명시된대로 RecordSource가 아닌 콤보 상자의 RowSource를 설정하고 있습니까? 왜 코드를 사용하여 콤보 상자의 RowSource를 설정합니까? 왜 그냥 RowSource 속성에서 SQL 문을 누른 다음 콤보 상자 GotFocus 이벤트 코드에서 RowSource의 Requery를 수행합니까? – June7
흠, 필터 (where 절)는 현재 편집중인 각 제품에 대해 변경되므로 동적으로 설정해야합니다. 그리고 선택한 각 레코드에 대해 콤보 상자 재구성을 위해 GotFocus를 사용하지 않을 것입니까? (그리드보기이므로 각 행에 콤보 상자가 복제됩니다.) – user3091705
콤보 상자 RowSource SQL 문 WHERE 절은 ProductNumber에 대한 참조를 가지므로 동적입니다. Seth의 대답은 콤보 상자 GotFocus 이벤트를 사용하여 쿼리를 트리거하는 것을 제외하고는이 행을 따른 것입니다.그는 주요 형태에 대한 의존성에 대해 좋은 지적을합니다. 일반적으로 기본 및 종속 콤보 박스는 동일한 형식입니다. 또한 별칭 값을 표시하는 조회가 포함 된 콤보 상자는 연속 또는 데이터 시트 양식에 적합하지 않습니다. – June7