【问题标题】:msaccess db field is zero length string but vba isnull() function returns nullmsaccess db 字段是零长度字符串,但 vba isnull() 函数返回 null
【发布时间】:2021-10-01 10:49:45
【问题描述】:

又是NULL!!!!

如果没有任何内容,我已将字段设置为零长度字符串,这适用于大约一半的记录。 运行sql语句:

select * from contacts WHERE organisation is null

按预期不返回任何行。

但是VBA

Debug.Print Len(Me.Organisation)
    If IsNull(Me.Organisation) Then
        Label50.Caption = "null"
    Else
        Label50.Caption = Len(Me.Organisation)
    End If

将所有长度为零的记录显示为 null 而不是 0

该字段在 db 上定义为带有以下参数的短文本:

为什么 VBA 告诉我它显然不是空值?

【问题讨论】:

  • 我无法复制此问题。代码在什么事件中?可能想要发布到允许附加文件并提供您的数据库进行分析的论坛。

标签: vba ms-access null


【解决方案1】:

以编程方式更改控件的属性会影响所有控件实例。在 ControlSource 中使用带有表达式的文本框,而不是使用 VBA 更改标签。

=IIf(IsNull(Organisation), "Null", Len(Organization))

将字段设置为允许 ZLS 并不能保证字段在没有数据时包含 ZLS。我从不允许在字段中使用 ZLS。

【讨论】:

  • 谢谢。还是有点糊涂。我应该在我的示例中的 VBA 之后扩展我的评论,说“将所有长度为零的记录显示为空而不是 0,但在长度不为零时正确显示长度”。我现在已经解决了这个问题,但下次我会采纳你的意见。
  • 请注意,简单地向表单添加默认值只会影响 记录,而不会影响现有记录。您需要对所有现有记录运行更新查询才能更改它们。
【解决方案2】:
Debug.Print Len(Me.Organisation)
If  Me.Organisation.text=" " Then
    Label50.Caption = "null"
Else
    Label50.Caption = Len(Me.Organisation)
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多