【问题标题】:Avoid Invalid use of Null error when the field is empty避免字段为空时无效使用 Null 错误
【发布时间】:2020-07-13 19:22:04
【问题描述】:

我在 Access 2010 中创建了一个表单,我根据文本框(B 和 C)填写表单,并选择表单一个组合框 (A)。问题是如果任何文本框留空,我会收到“无效使用 Null”错误。我注意到如果我将文本框调暗为 Variant 而不是 Integer,我可以避免此错误。我不确定这是否是正确的解决方案。我可以更改以下脚本以避免此错误吗?

Private Sub ABCBoxEnter_Click()
Dim A As String
Dim B As Integer
Dim C As Integer
If Not IsNull(Me!ComboBox.Value) Then
    A = Me!ComboBox.Value
    B = Afield
    C = Bfield
    values = "VALUES ("
    values = values & "'" & ID & "','" & A & "','" & B & "','" & C & "')"
    SQL = "INSERT  INTO ContactTable (ID, A, B, C)"
    SQL = SQL & values
    DoCmd.RunSQL SQL
    Me.B.Value = ""
    Me.C.Value = ""
End If
End Sub

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    最大的问题是:当值为 Null 时,您希望发生什么。

    如您所见,整数和字符串不能包含Null,而Variant 可以。将中间变量调暗为Variant 是一种在您的代码中可以使用的方法。您还可以使用Nz 函数将Null 替换为空字符串(如果称为字符串)或0(如果称为整数)。

    请注意,如果您要从 SQL 语句中删除 ' 撇号,则会遇到错误,并且您必须在 SQL 语句中只有 B 的地方使用 Iif(IsNull(B), "Null", B)

    【讨论】:

      【解决方案2】:

      你可以使用Nz

      values = values & "'" & Nz(ID) & "','" & Nz(A) & "','" & Nz(B) & "','" & Nz(C) & "')"
      

      或者,更好的是,实现我的功能CSql

      【讨论】:

      • 如果Me!ComboBox.ValueNull,这将在A = Me!ComboBox.Value 上抛出无效的null 使用,除非A 被指定为VariantA = CSql(Me!ComboBox.Value)BC 相同,在使用 CSql 时将是更有效的方法。那么BC 应该是一个字符串。
      • @ErikvonAsmuth:不,这已被之前的 If 排除(上一行)。但请参阅我添加的 CSql 链接。
      • 感谢您的回答。我使用 Nz 函数如下:'" & Nz(B, “N/A”) & "','" & Nz(C, “N/A”) & "' 并且它与第一个数据一起工作正常条目,我可以在没有条目的地方看到 N/A,但对于以下条目,我刚刚收到没有条目的空白单元格!!知道为什么会发生这种情况,我该如何解决?
      • 抱歉,我感兴趣的部分已经过去了。完整的命令是:values = values & "'" & Nz(ID) & "','" & Nz(A) & " ','" & Nz(B, "N/A") & "','" & Nz(C,"N/A") & "')"。我没有将Nz与ID或A一起使用。即使我与ID和A一起使用,它也没有解决问题。
      • 不过,如果 ID 是一个键,并且应该使用该名称,则必须为其分配一个值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多