2015-04-05 89 views
1

我有一個運行下面的SQL的報告。數值硬編碼時運行良好。但是,當我通過接受日期的表格提供值時,出現錯誤表達式太複雜了?

該表達式輸入錯誤或者評估過於複雜。例如,數字表達式可能包含太多複雜的元素。嘗試通過將表達式的各個部分分配給變量來簡化表達式

此外,我還會收到提示輸入Workdate的提示。我的方法有什麼問題?

SELECT Employees.EmployeeId, Employees.EmployeeName, TasksEntries.Project, 
TasksEntries.Task, SUM(TimeTracker.WorkHours) AS TotalWorkHours 
FROM Employees INNER JOIN (TasksEntries INNER JOIN TimeTracker ON 
(TasksEntries.EmployeeId=TimeTracker.EmployeeId) AND 
(TasksEntries.TaskID=TimeTracker.TaskId)) ON 
(Employees.EmployeeId=TimeTracker.EmployeeId) AND 
(Employees.EmployeeId=TasksEntries.EmployeeId) 
WHERE TimeTracker.WorkDate>="#" & Forms!frmManagerReport!txtMgrRptStartDate 
& "#" And TimeTracker.WorkDate<="#" & 
Forms!frmManagerReport!txtMgrRptEndDate & "#" 
GROUP BY Employees.EmployeeId, Employees.EmployeeName, 
TasksEntries.Project, TasksEntries.Task; 

回答

0

我沒有在Access工作多年,但我希望這會有所幫助。 1 - 表達不好 - 在執行之前,在調試器中捕獲構建的表達式,但在收集值之後。然後,您可以直接在Access中檢查並運行構建的字符串。您可能會以這種方式更好地看到錯誤。 2 - 提示輸入工作日 - 可能是因爲查詢沒有真正擁有它。是否區分大小寫?是Forms!frmManagerReport!txtMgrRptStartDate和Forms!frmManagerReport!txtMgrRptEndDate實際填寫的和有效日期?

0

您已將所有連接條件組合在一起,這是行不通的。

相反,用加入他們的代碼屬於哪:

SELECT e.EmployeeId, e.EmployeeName, te.Project, te.Task, SUM(TimeTracker.WorkHours) AS TotalWorkHours 
FROM Employees e 
JOIN TasksEntries te ON te.EmployeeId = e.EmployeeId 
JOIN TimeTracker tt ON tt.EmployeeId = e.EmployeeId 
    AND te.TaskID = tt.TaskID 
WHERE tt.WorkDate BETWEEN "#" & Forms!frmManagerReport!txtMgrRptStartDate & "#" AND "#" & Forms!frmManagerReport!txtMgrRptEndDate & "#" 
GROUP BY e.EmployeeId, e.EmployeeName, te.Project, te.Task; 

我還添加了表的別名,並推出了BETWEEN使查詢更具可讀性。

+0

我能夠解決的一件事是結果出來正確。該查詢不需要「#」標誌。不過,我仍然會收到TimeTracker.Workdate的提示。 – rajeev 2015-04-06 01:48:18