我建立了一个未结合的形式与多个组合框与通过接收到SQL查询中的参数的意图。当所有字段包含一个值时,我的SQL都可以工作,但当一个为空时,整个查询失败。我有我的每个字段的where子句设置为各自的(tblIRS.[Field]=Forms!frmSUPIR![Field] OR Forms!frmSUPIR![Field] IS NULL OR tblIRS.[Field] IS NULL) AND (...
从值传递参数到查询
我也试图从通过变量传递从绑定的值,然后构建VBA的SQL以及无济于事。每个字段的在线类似如下:
Dim strFilter As String
Dim strSQL As String
If Nz(Me.EMP1, "") <> "" Then
strFilter = strFilter & "tblIRS.[EMP1] = '" & PQ(Me.txtEMP1) & "' And " ...
strSQL = "SELECT * FROM tblIRS " & _
"WHERE" & strFilter
End If
上面包含了一个替换PQ的函数。
我发现很多资源处理上面,但没有包括如何处理空值表和/或表格条目。
我的目标是让用户通过使用尽可能少的组合框尽可能缩小搜寻范围。理想情况下,表单接受组合框中的空值,将其视为空值,并且不显示该字段的空值表的所有记录。
例如:
- 形式frmSUPIR [EMP1] = [张三]
- 形式frmSUPIR [EMP2] = [琼斯,马克]
- 形式frmSUPIR [!!!!! EMP3] = NULL
我渴望拥有查询返回的所有实例,其中EMP1 =史密斯,约翰和 EMP2 =琼斯,马克和ANY EMP3的值。什么是最好的方式去做这件事?
希望我是不够清楚,谢谢你提前,
JS
谢谢OpiesDad,这似乎让我走上了正轨。运行代码时出现语法错误。特别是运行时间3075.我尝试设置然后= TRUE,=“TRUE”,='“”'。有任何建议吗?我使用:DoCmd.OpenReport “repSUPIR”,acViewPreview,STRSQL打开报表。再次感谢你。 – atomedic
'WHERE'之后缺少一个空格... – Gustav
我会检查最终的SQL字符串,然后尝试在VBA之外运行,以查看是否有任何错误。该错误通常是SQL语法错误。你绝对想要=“真”.....正如我所说,这将使where子句“在哪里x和y和z ....“如果你放入= TRUE,它实际上可能工作(如果VBA自动将布尔转换为字符串),但它不是很好,如果你放入=”“那么你的where子句看起来就像”WHERE x AND AND z“,这肯定不起作用 – OpiesDad