我有一个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不应该有效。但是,删除该部分时,原始的大查询会出错。
我的猜测是,当从子表单运行查询时,字段未正确传递给查询并且是数字字段,这会导致问题。
你看到我收到消息的原因了吗?
答案 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]