首页 > 解决方案 > VBA SQL 哪里是 NULL

问题描述

我试图使用来自访问表单的输入创建带有 where 子句的 VBA sql 字符串。即使其中一个用户输入为空/未选中​​,我也需要代码仍能正常运行。当所有用户输入都被选中时,下面的代码可以正确运行,但是当一个输入为空/未选中​​时,查询最终会拉回表中的所有记录。

Dim SQL As String
SQL = "SELECT qry_1.field1, qry_1.field2, qry_1.field3 INTO recordset FROM qry_1" & _

" WHERE ((qry_1.Field1) IS NULL OR (qry_1.Field1) = '" & [Forms]![frm_Parameters]![cmbx_1] & "') " &_
" AND ((qry_1.Field2) IS NULL OR (qry_1.Field2) = '" & [Forms]![frm_Parameters]![cmbx_2] & "' ) " & _
" AND ((qry_1.Field3) IS NULL OR (qry_1.Field3) = '" & [Forms]![frm_Parameters]![cmbx_3] & "')    ;"


DoCmd.RunSQL SQL

标签: sqlvbams-access

解决方案


DoCmd.RunSQL用于操作查询 ( UPDATE, INSERT, DELETE)。

要回答这个问题,我会这样做:

Nz(Field1,Nz([Forms]![frm_Parameters]![cmbx_1]))=Nz([Forms]![frm_Parameters]![cmbx_1])

Field1如果其中一个或为 NULL,这将创建相等性,[Forms]![frm_Parameters]![cmbx_1]而不会破坏查询的其余部分。

要在 VBA 中使用它:

"Nz(Field1,'" & Nz([Forms]![frm_Parameters]![cmbx_1]) & "')='" & Nz([Forms]![frm_Parameters]![cmbx_1]) & "'"

另请参阅 Olivier Jacot-Descombes 回答中关于考虑字符串中的单引号的评论。


推荐阅读