2015-04-05 85 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