【问题标题】:Error "This expression is typed incorrectly, or it is too complex to be evaluated." in query with Date Fields错误“此表达式键入错误,或者它太复杂而无法计算。”在使用日期字段进行查询
【发布时间】:2021-10-26 18:13:09
【问题描述】:

我正在尝试运行一个查询,在给定产品的情况下,他的预计持续时间和收到产品的日期会返回到期日期和距离该到期日期的天数。我已经有另一个查询执行完全相同的操作,但使用另一个表并且工作正常,但由于某种原因,我无法使其工作并继续收到错误“此表达式输入错误,或者它太复杂进行评估。”。我在这里阅读了很多答案并尝试了各种不同的东西(检查我是否有空值,是否所有日期都输入正确,使用 DateValue,......)但它们似乎都不起作用。

谁能帮帮我?

我使用的代码是:

SELECT DISTINCT QueryMensalMov.PersonID, QueryMensalMov.[Nº pessoal] AS [Name], QueryMensalMov.Product, QueryMensalMov.Quantity, [ProductList].DurationDays, QueryMensalMov.Date, DateAdd("d",Nz([ProductList].[DurationDays],0),DateValue([Date])) AS ExpirationDate, DateDiff("d",Date(),DateAdd("d",Nz([ProductList].[DurationDays],0),Date)) AS Days
FROM [ProductList] INNER JOIN QueryMensalMov ON [ProductList].ProductID = QueryMensalMov.ProductID
WHERE ((([ProductList].DurationDays)>0) AND ((DateAdd("d",Nz([ProductList].[DurationDays],0),Date)) Between Date() And (Date()+90)));

这些表格是: QueryMensalMov

PersonID Nº pessoal ProductID Date
1 Filipa A 20-05-2020
2 Mark B 15-07-2021

产品列表:

ProductID DurationDays
A 30
B 90

非常感谢您的帮助!

【问题讨论】:

  • 建议不要使用保留字作为名称,这有时会导致查询问题。 Name 是保留字。更改它或将其括在 [ ] 中,看看是否有帮助。提供示例数据作为相关文本表。
  • @June7 请查看已编辑的问题,已添加表格。试图将 [ ] 放在 Name 中,但没有任何改变
  • 您有另一个查询执行这些相同的日期计算并且有效?我用你的数据测试了查询,它可以工作。
  • @June7 是的,我有另一个查询但使用另一个表。该表与此非常相似。你知道为什么这可能对你有用,而不是对我有用吗?可能是数据有问题,因为我刚刚在这里添加了示例数据,但是我已经检查了所有日期,所以这没有意义

标签: ms-access ms-access-2010


【解决方案1】:

尝试使用[Date]:

SELECT DISTINCT 
    QueryMensalMov.PersonID, 
    QueryMensalMov.[Nº pessoal] AS [Name], 
    QueryMensalMov.Product, 
    QueryMensalMov.Quantity, 
    [ProductList].DurationDays, 
    QueryMensalMov.Date, 
    DateAdd("d", Nz([ProductList].[DurationDays],0),DateValue([Date])) AS ExpirationDate, 
    DateDiff("d", Date(), DateAdd("d", Nz([ProductList].[DurationDays],0), [Date])) AS Days
FROM 
    [ProductList] 
INNER JOIN 
    QueryMensalMov 
    ON [ProductList].ProductID = QueryMensalMov.ProductID
WHERE 
    ([ProductList].DurationDays > 0) 
    AND 
    (DateAdd("d", Nz([ProductList].[DurationDays],0),[Date]) Between Date() And (Date()+90));

【讨论】:

  • 还是不行。事实上,该字段的名称是 OperationDate,而不仅仅是 Date(我必须翻译数据,所以更容易理解并更改了名称)。但一切都与我已经尝试过的日期有关
【解决方案2】:

好的,已经修复了,老实说这是一个愚蠢的错误。

QueryMensalMov 表实际上是一个基于另一个表的查询。问题是日期字段是日期/时间扩展格式,而不仅仅是日期/时间。这导致了问题,因为很明显,他无法使用那种 Date 执行 DateAdd。

不知道这对某人是否有用,因为这是一个愚蠢的错误,但就是这样。始终检查表格的格式!

【讨论】:

  • 只要我能做到(我相信就在明天),我会标记的!无论如何感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多