2014-03-06 46 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

@HansUP你有不同的建議嗎? – user2119980

回答

0

我想你想規範化這些數據。我將有一個帶有EmployeeID和DevelopmentForEmployee的獨立表格,並將其鏈接回主表格。通過這種方式,您可以搜索此新表以查找DevelopmentForEmployee,並且只需INNER JOIN即可查詢EmployeeID上的主表以實現此目的。然後,它應該看起來像這樣:

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] & "*")); 

可能需要一些調整,但可能是非常接近。

相關問題