【问题标题】:SELECT query causes "expression is too complex to evaluate or there is an error"SELECT 查询导致“表达式太复杂无法评估或有错误”
【发布时间】:2014-01-23 16:09:28
【问题描述】:

最初有 1000 条记录要评估。现在有 40000 条。请帮忙! 我只是想根据交易日期和开始日期获取交易的周数。

SELECT [1_Webtime_By_Date].Badge,Int(((([1_Webtime_By_Date].Date-Forms![Date Form].StartDate)+1.99)/7)+1) AS Week
FROM 1_Webtime_By_Date
GROUP BY [1_Webtime_By_Date].Badge,Int(((([1_Webtime_By_Date].Date-Forms![Date Form].StartDate)+1.99)/7)+1);

【问题讨论】:

  • 1000 条记录运行良好
  • 尝试 SELECT DISTINCT [1_Webtime_By_Date].Badge,Int(((([1_Webtime_By_Date].Date-Forms![Date Form].StartDate)+1.99)/7)+1) AS Week FROM 1_Webtime_By_Date
  • Nope doesn't work 显示相同的错误。我尝试将表达式简化为 ([1_Webtime_By_Date].Date-Forms![Date Form].StartDate) 以防它与访问的数学记忆能力有关。仍然显示相同的错误。
  • 好吧,请给我们一些数据示例,其中包含您使用的确切类型。
  • [1_Webtime_By_Date].Date 是 Date 类型,例如2013-12-31,表格中使用的日期类型为 General Date,输入为 02-12-2013

标签: sql ms-access ms-access-2003


【解决方案1】:

这是 Access 使用的编译器的一个已知问题。在 Access 97 之后取消了 64K 段的限制,但您查询的数据量对于 Access 来说实在是太多了。下页给出的一些提示可能会有所帮助,但在我看来,您需要使用适当的数据库系统,例如 MS SQL。如果成本是问题,可以使用免费版本 (SQL Express)。

ACC: "Out of Memory" or "Query Too Complex" with Query/Report

SQL Server Express Download page

如果您习惯于为最终用户使用 Access,您可能会发现使用 SQL Server 作为数据库并使用 Access 作为前端可能会帮助您解决问题。

给出的最佳提示是使用别名来缩短查询的长度并尝试删除嵌套查询:

Access SQL: FROM clause

【讨论】:

    【解决方案2】:

    我的第一个倾向是在两个减号之前和之后添加一些空白。 我的下一个测试是将表单字段设为 DATE 类型,并使用类似

         DATEPART(ww,[1_Webtime_By_Date].Date - Forms![Date Form].StartDate ) AS WK
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多