MS-Access 2007查询运行时错误

时间:2016-07-12 11:40:31

标签: ms-access-2007

我有一个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是该表单上字段的名称。

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

数据库中的列是&#34; Serial&#34;它是一个整数。它将与表单字段(文本字段)进行比较。

我可以单独执行违规部分,如下所示:

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

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

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

你看到我收到消息的原因了吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

 $ cat /tmp/newline
 s3741206\n
 s2561284\n
 s4411364\n
 s2516482\n
 s2071534\n
 s2074633\n
 s7856856\n
 s11957134\n
 s682333\n
 s9378200\n
 s1862626\n

 $ for LINE in $(cat /tmp/newline); do echo "${LINE%\\n}"; done
 s3741206
 s2561284
 s4411364
 s2516482
 s2071534
 s2074633
 s7856856
 s11957134
 s682333
 s9378200
 s1862626

将这两个参数指定为Long:

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