ms-access - “此表达式输入错误或太复杂而无法评估”错误
问题描述
我正在尝试将 SQL 语句用于使用 VBA 的报告的记录源。我知道 SQL 可以工作,因为我从正在工作的查询的 SQL 视图中复制了 SQL。
这里是在报告的打开事件时触发的 SQL 记录源。我对 SQL 语句进行了更改,该语句添加了一个变量strInput
,您可以在 WHERE 子句中看到该变量。
Private Sub Report_Open(Cancel As Integer)
Dim sql As String
Dim strInput As String
strInput = Me.OpenArgs
sql = "SELECT DISTINCTROW INV.NUM, INV.SUB, [INVD]![QTY]*([INVD]![VDR]+[INVD]![MATQ]) AS Expr1, [INVD]![QTY]*[INVD]![LPR] AS Expr2, [Expr1]+[Expr2] AS Expr3, [INVD]![MATQ]+[INVD]![VDR] AS Expr4, ([INVD]![MATQ]+[INVD]![VDR])*[INVD]![QTY]*0.8 AS Expr5" & _
" FROM (JOBS INNER JOIN UN ON JOBS.UNID = UN.JOBS) INNER JOIN ((CONT INNER JOIN INV ON CONT.CTNO = INV.CTNO) INNER JOIN INVD ON (INV.CTNO = INVD.CTNO) AND (INV.INV = INVD.INV)) ON (UN.UNID = INVD.UNID) AND (UN.CTNO = INVD.CTNO)" & _
" WHERE (((INV.JOB) = [Forms]![02- UNIT JOB INVOICE ENTRY]![JOB])) AND InvNum = ' " & strInput & "'" & _
" ORDER BY INV.CTNO, INV.JOB, INV.INV, INVD.ITEM;"
If Me.OpenArgs <> "" Then
Me.RecordSource = sql
End If
End Sub
我得到的错误是
此表达式键入错误或太复杂而无法计算
我知道有类似的线程打开,但这些解决方案对我不起作用。谢谢你。
编辑 1:
根据您的回复,我删除了 on open 程序并尝试使用您所说的 where 子句
MsgBox strInput
DoCmd.OpenReport "PRINT REPORT", acPreview, , "INVD.InvNum =' " & strInput & "'"
这现在给了我同样的错误
此表达式键入错误或太复杂而无法计算
解决方案
解决方案是从 WHERE 子句中删除字符串引号,因为 InvNum 是一个数字。最后的 Where 子句如下所示
WHERE (((INV.JOB)=[Forms]![02- UNIT JOB INVOICE ENTRY]![JOB])) AND INVD.[InvNum] = " & strInput
推荐阅读
- vba - VBA中自调用函数中的返回数组
- ios - 使用 MDCMultilineTextField 的带有边框和浮动占位符的 UITextView
- java - Spring MessageSource:访问依赖jar中的消息文件
- javascript - 在本机反应中使用redux将输入从大写转换为小写
- java - 不同输入的二维码可以相同吗?
- react-testing-library - 如何使用 useEffect 和 useRef 挂钩将焦点设置到反应组件中的 div 元素?以及如何测试它?
- node.js - 带有 TypeScript 的 Azure Functions 的 Hello World 应用程序无法使用 VSCode 启动
- assembly - 检查输入是否是汇编语言中的字母、数字或特殊字符
- django - 将模板中的 id = "" 添加到 'HttpResponseRedirect (reverse ('name_view'))'。姜戈
- c# - 具有 2 个过滤参数的 MVC 控制器