【问题标题】:Access 2002 and VBA: Test for field in recordsetAccess 2002 和 VBA:测试记录集中的字段
【发布时间】:2014-06-30 14:30:57
【问题描述】:

考虑:

Do Until rs.EOF = True
    Me.vcTBConcatName.SetFocus
    If IsNull(rs.Fields!contactname.Value) Then
        Me.vcTBConcatName.Text = "No value recorded"
    Else
        Me.vcTBConcatName = rs.Fields!contactname
    End If
    rs.MoveNext
Loop

这段代码 sn-p 的目的是:将焦点设置在文本框 (vcTBConcatName) 上,检查记录集中是否存在 contactname 的值,如果存在则使用该值填充文本框,或者填充如果不是,则带有No value recorded 的文本框。

仅当记录集中有contactname 的值时,代码才会运行并填充文本框。如果contactname 没有返回值,则不会在文本框中放置替代文本。

有人能指出我做错了什么吗?

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    也许这对你有用。如果您只是在搜索一个值,则不必遍历记录集:

    Me.vcTBConcatName.SetFocus
    
    rs.FindFirst "[contactname] IS NOT NULL AND [contactname] <> ''"
    
    If rs.NoMatch Then
        Me.vcTBConcatName = "No value recorded"
    Else
        Me.vcTBConcatName = rs.Fields!contactname
    End If
    

    代码在记录集中查找 ContactName 中的第一个 NOT NULL;如果找到它,它将使用该名称,如果没有更新则表示没有记录值。

    编辑: 经过漫长而艰苦的调试,原来是 0 长度字符串是罪魁祸首。在 FindFirst 语句中添加了 [contactname] '' 以确保它也在寻找那些。

    【讨论】:

    • 是的 - 我只是在尝试这个解决方案。如果没有该字段的信息,我确实想让用户知道 - 这就是我在上面的 sn-p 中尝试做的事情。因此,如果您的解决方案在我的上下文中有效,那将是完美的。
    • 告诉我进展如何。我刚刚又更新了。我正在阅读和重读您的帖子并感到困惑-工作日结束时只有我,对不起。 :(
    • 首先 - 感谢您的及时答复。我已经尝试了你的答案,不幸的是,当它运行时,它不会填充文本框,以防找不到值(rs.NoMatch)。你还能想到其他的可能吗?
    • @SteveCooke:是的,看我的编辑。我认为 Me.vcTBConcatName.Text 应该只是 Me.vcTBConcatName。对此感到抱歉。
    • 再次感谢 VBlades - 我已经尝试了两种方法,并且我已经尝试了 rs.NoMatch = True (根据您之前的编辑)。全部运行时,如果没有要填充的值,则不会填充文本框。
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2011-06-18
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多