2014-03-06 3 views
0

데이터를 저장/편집하는 데 사용되는 액세스 권한이 있습니다. 기능 중 하나는 검색 기능입니다. 관련 필드에 데이터를 입력하고 검색 버튼을 누르면 설명과 일치하는 모든 레코드가 표시됩니다. 나는 다른 훈련 과정을 위해 5 가지 콤보 상자를 가지고 있습니다. 지금 내가 1 코스를 찾고 싶다면 각 콤보 박스에서 그 코스를 선택해야 할 것입니다. 5 코스에있을 수 있기 때문입니다. 코스를 다시 작성할 수있는 방법이 있는지 궁금 해서요. 5 중 하나와 그것은 여전히 ​​데이터에 대한 모든 5 개의 필드를 검색 할 것인가? 검색 쿼리 코드는 다음과 같습니다.5 개 필드 있음 1 쿼리 실행

SELECT CDData.EmployeeID, CDData.EmployeeName, CDData.Gender, CDData.EEOC, 
CDData.ReadinessLevel, CDData.Division, CDData.Center, CDData.EmployeeFeedback, 
CDData.DevelopmentForEmployee1, CDData.DevelopmentForEmployee2, 
CDData.DevelopmentForEmployee3, CDData.DevelopmentForEmployee4, 
CDData.DevelopmentForEmployee5, CDData.Justification, CDData.Changed 
FROM CDData 
WHERE 
(((CDData.EmployeeID) Like "*" & [Forms]![frmCDData]![txtEmpID] & "*") AND 
((CDData.EmployeeName) Like "*" & [Forms]![frmCDData]![txtEmpName] & "*") AND 
((CDData.Gender) Like "*" & [Forms]![frmCDData]![cboGender] & "*") AND 
((CDData.EEOC) Like "*" & [Forms]![frmCDData]![cboEEOC] & "*") AND 
((CDData.ReadinessLevel) Like "*" & [Forms]![frmCDData]![cboReadyLvl] & "*") AND 
((CDData.Division) Like "*" & [Forms]![frmCDData]![cboDivision] & "*") AND 
((CDData.Center) Like "*" & [Forms]![frmCDData]![txtCenter] & "*") AND 
((CDData.EmployeeFeedback) Like "*" & [Forms]![frmCDData]![txtFeedback] & "*") AND 
((CDData.DevelopmentForEmployee1) Like "*" & [Forms]![frmCDData]![cboDevelopment1] & "*") AND 
((CDData.DevelopmentForEmployee2) Like "*" & [Forms]![frmCDData]![cboDevelopment2] & "*") AND 
((CDData.DevelopmentForEmployee3) Like "*" & [Forms]![frmCDData]![cboDevelopment3] & "*") AND 
((CDData.DevelopmentForEmployee4) Like "*" & [Forms]![frmCDData]![cboDevelopment4] & "*") AND 
((CDData.DevelopmentForEmployee5) Like "*" & [Forms]![frmCDData]![cboDevelopment5] & "*") AND 
((CDData.Justification) Like "*" & [Forms]![frmCDData]![txtJustification] & "*") AND ((CDData.Changed) Like "*" & [Forms]![frmCDData]![cboChanged] & "*")); 
+0

교육 과정을 열 대신 별도의 행으로 저장하면이 작업이 쉬워집니다. 현재 테이블 구조를 유지하기 위해 최선을 다하고 있습니까? – HansUp

+0

이 특정 과정을 추천하기위한 목적이기 때문에 가능합니다. 그리고 그들은 5 명 또는 심지어 1 명까지 추천 할 수 있습니다. – user2119980

+0

@ 한취 다른 권장 사항이 있습니까? – user2119980

답변

0

이 데이터를 약간 정규화하고 싶습니다. EmployeeID 및 DevelopmentForEmployee가있는 별도의 테이블을 가지고 기본 테이블로 다시 연결합니다. 이렇게하면이 새 테이블에서 DevelopmentForEmployee를 검색 할 수 있으며이 목적으로 EmployeeID의 주 테이블에 쿼리하는 INNER JOIN 만 쿼리하면됩니다. 그러면 다음과 같이 표시되어야합니다.

SELECT CDData.EmployeeID, CDData.EmployeeName, CDData.Gender, CDData.EEOC, 
CDData.ReadinessLevel, CDData.Division, CDData.Center, CDData.EmployeeFeedback, 
CDData.DevelopmentForEmployee1, CDData.DevelopmentForEmployee2, 
CDData.DevelopmentForEmployee3, CDData.DevelopmentForEmployee4, 
CDData.DevelopmentForEmployee5, CDData.Justification, CDData.Changed 
FROM CDData 
INNER JOIN (SELECT * FROM MyNewTable WHERE DevelopmentForEmployee Like "*" & [Forms]![frmCDData]![cboDevelopment1] & "*") 
as DevForEmp 
    ON CDATA.EmployeeID = DevForEmp .EmployeeID 
WHERE 
(((CDData.EmployeeID) Like "*" & [Forms]![frmCDData]![txtEmpID] & "*") AND 
((CDData.EmployeeName) Like "*" & [Forms]![frmCDData]![txtEmpName] & "*") AND 
((CDData.Gender) Like "*" & [Forms]![frmCDData]![cboGender] & "*") AND 
((CDData.EEOC) Like "*" & [Forms]![frmCDData]![cboEEOC] & "*") AND 
((CDData.ReadinessLevel) Like "*" & [Forms]![frmCDData]![cboReadyLvl] & "*") AND 
((CDData.Division) Like "*" & [Forms]![frmCDData]![cboDivision] & "*") AND 
((CDData.Center) Like "*" & [Forms]![frmCDData]![txtCenter] & "*") AND 
((CDData.EmployeeFeedback) Like "*" & [Forms]![frmCDData]![txtFeedback] & "*") AND 
((CDData.Justification) Like "*" & [Forms]![frmCDData]![txtJustification] & "*") AND 
((CDData.Changed) Like "*" & [Forms]![frmCDData]![cboChanged] & "*")); 

일부 조정이 필요할 수도 있지만 꽤 가까울 수도 있습니다.

관련 문제