访问:表达式太复杂而无法评估

时间:2013-06-28 22:06:07

标签: sql ms-access-2007

我正在尝试在周末日期从数据库中整理出值。我在7个数据库中的6个上使用的脚本(它们都是相同构造的)。第7个数据库不起作用。我得到表达太复杂的错误。任何帮助搞清楚为什么??

这是我的代码:

 SELECT UPC_Test.Type, 
        UPC_Test.[Model No], 
        UPC_Test.[Model Desc], 
        UPC_Test.[Serial No], 
        Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy") AS [Test Date], 
        UPC_Test.Parameter, 
        UPC_Test.[Failure Symptom], 
        UPC_Test.[Repair Action], 
        UPC_Test.[Factory Select], 
        UPC_Test.[Test Station]
FROM UPC_Test
GROUP BY UPC_Test.Type, 
         UPC_Test.[Model No], 
         UPC_Test.[Model Desc], 
         UPC_Test.[Serial No], 
         Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy"), 
         UPC_Test.Parameter, 
         UPC_Test.[Failure Symptom], 
         UPC_Test.[Repair Action], 
         UPC_Test.[Factory Select], 
         UPC_Test.[Test Station]
HAVING (((UPC_Test.Type)="Production") 
AND ((Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy"))=[Enter]) 
AND ((UPC_Test.[Failure Symptom])<>"") 
AND ((UPC_Test.[Repair Action])<>"") 
AND ((UPC_Test.[Test Station])="UPC RF Test"))
ORDER BY Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy");

2 个答案:

答案 0 :(得分:1)

如果在选择行中有聚合列,则使用group by子句 - 例如sum,count。我看不到你有任何 - 这用于限制返回的行

因此,您可以删除组 - 通过聚合列整理查询 - 并将has转换为where子句。

在您的字段名称中包含空格并将返回咬你多次被认为是非常糟糕的做法 - 这需要更改数据库架构

我添加了查询更改(未经测试,我没有访问权限)

   SELECT UPC_Test.Type, 
    UPC_Test.[Model No], 
    UPC_Test.[Model Desc], 
    UPC_Test.[Serial No], 
    Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy") AS [Test Date], 
    UPC_Test.Parameter, 
    UPC_Test.[Failure Symptom], 
    UPC_Test.[Repair Action], 
    UPC_Test.[Factory Select], 
    UPC_Test.[Test Station]
 FROM UPC_Test
     WHERE (((UPC_Test.Type)="Production") 
     AND ((Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[TestDate],0)),"m/d/yyyy"))=[Enter]) 
     AND ((UPC_Test.[Failure Symptom])<>"") 
     AND ((UPC_Test.[Repair Action])<>"") 
     AND ((UPC_Test.[Test Station])="UPC RF Test"))
     ORDER BY Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[TestDate],0)),"m/d/yyyy");

答案 1 :(得分:0)

尝试减少您的查询和返回的字段,以便您可以消除不会导致任何问题的部分内容。如果你能分辨出什么不是导致错误,那么你就更接近于知道导致错误的原因了。

我会仔细查看计算的字段和限制,因为可能是一段不良数据导致其未定义(例如格式化日期为2013年2月30日)。

还尝试使用第7个数据库中的数据子集来跟踪是否存在某些错误数据。制作数据库的副本,确保发生错误。删除记录的前半部分,看它是否仍然存在。如果没有,请获取另一个副本,并仅使用数据的后半部分进行尝试。如果它失败了一半而不是另一半,那很可能是数据,所以再次开始删除一半来追踪它。