表达太复杂了?

时间:2015-04-05 19:58:03

标签: sql ms-access-2007

我在下面运行SQL报告。当值被硬编码时运行良好。但是,当我通过接受日期的表单提供值时,我得到错误

此表达式输入错误,或者太复杂而无法评估。例如,数字表达式可能包含太多复杂元素。尝试通过将表达式的一部分分配给变量来简单地表达表达式

此外,我也会收到工作日提示。我的做法有什么问题?

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;

2 个答案:

答案 0 :(得分:0)

我多年来一直在Access工作,但我希望这会有所帮助。 1 - 错误的表达式 - 在执行之前在调试器中捕获构建的表达式,但是在您收集了值之后。然后,您可以直接在Access中检查并运行构建的字符串。您可以通过这种方式更好地查看错误。 2 - 提示输入Workdate - 可能是因为查询确实没有。它是区分大小写的吗?是Forms!frmManagerReport!txtMgrRptStartDate和Forms!frmManagerReport!txtMgrRptEndDate实际填写并且是一个有效的日期?

答案 1 :(得分: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以使查询更具可读性。