Sql 表达太复杂了?
我有一个运行下面SQL的报告。硬编码值时运行正常。但是,当我通过接受日期的表单提供值时,我会得到错误 此表达式键入错误,或太复杂而无法计算。例如,数值表达式可能包含太多复杂的元素。尝试通过将表达式的一部分指定给变量来简化表达式 此外,我还得到了工作日期的提示。我的方法有什么问题Sql 表达太复杂了?,sql,ms-access-2007,Sql,Ms Access 2007,我有一个运行下面SQL的报告。硬编码值时运行正常。但是,当我通过接受日期的表单提供值时,我会得到错误 此表达式键入错误,或太复杂而无法计算。例如,数值表达式可能包含太多复杂的元素。尝试通过将表达式的一部分指定给变量来简化表达式 此外,我还得到了工作日期的提示。我的方法有什么问题 SELECT Employees.EmployeeId, Employees.EmployeeName, TasksEntries.Project, TasksEntries.Task, SUM(TimeTracker.
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;
我已经多年没有在Access工作了,但我希望这会有所帮助。1-错误表达式-在调试器执行之前,但在收集值之后,在调试器中捕获内置表达式。然后,您可以直接在Access中检查并运行构建的字符串。这样您可能会更好地看到错误。2-提示输入Workdate-可能是因为查询中没有它。它区分大小写吗?是表格!frmManagerReport!TXTMGRPTStartDate和表单!frmManagerReport!TxtMgrPtendDate是否已实际填写,是否为有效日期?您已将所有加入条件组合在一起,这将不起作用 而是使用它们所属的联接对它们进行编码:
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;
我还添加了表别名,并引入了中间值,以使查询更具可读性。我能够解决的一件事是结果正确。查询不需要这些标志。但是我仍然会得到TimeTracker.Workdate的提示。