【问题标题】:MS-Access 2007 query run-time errorMS-Access 2007 查询运行时错误
【发布时间】:2016-07-12 22:56:17
【问题描述】:

我有一个 MS-Query 导致运行时出现问题错误 #3071 消息很长,这里是开头:

表达式输入错误,或者太复杂而无法计算。

查询有许多列和函数,经过反复试验,我将查询的违规部分隔离为:

...
And
[Component.Serial])>=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq])) 
And 
([Component.Serial])<=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq2])))

名称:frm_RptFilter_Components 是输入来自的表单的正确名称,名称:fldAutoSeq、fldAutoSeq2 是该表单上字段的名称。

表达式 Forms... 是正确的,并用于查询的其他部分。所以拼写不是问题。

数据库中的列是“Serial”,它是一个整数。它被比作表单域(文本域)。

我可以自己执行有问题的部分,如下所示:

SELECT * FROM Component
WHERE ((
    [Component.Serial])>=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq])) 
    And 
    ([Component.Serial])<=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq2])))

所以,我很困惑。如果违规部分包含语法错误,那么上面的 SELECT 应该不起作用。但是,当删除该部分时,原始大查询会出错。

我的猜测是,当从子表单运行查询时,字段没有正确传递给查询并且是数字字段,这会导致问题。

你明白我收到消息的原因吗?

【问题讨论】:

    标签: ms-access-2007


    【解决方案1】:

    试试这个:

    And
    [Component.Serial]>=[Forms]![frm_RptFilter_Components].[fldAutoSeq]
    And 
    [Component.Serial]<=[Forms]![frm_RptFilter_Components].[fldAutoSeq2]
    

    将这两个参数指定为Long:

    [Forms]![frm_RptFilter_Components].[fldAutoSeq] 
    [Forms]![frm_RptFilter_Components].[fldAutoSeq2]
    

    【讨论】:

    • 非常聪明。有效!我对 MS-Access 不太熟悉,但这对我来说并不明显!
    • 这是一个老把戏。它通过缩小表单字段输入的可能选项来工作。
    猜你喜欢
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多