【问题标题】:VBA If/Then based on Record CountVBA If/Then 基于记录计数
【发布时间】:2018-08-13 15:42:04
【问题描述】:

我想在 VBA 中创建一个 If/Then 语句,如果记录集中有多个记录,则填充一条消息,如果只有记录,则填充另一条消息。

我现在正在使用

If rst.EOF = False Then...

Else ...

End If

不管记录集中有多少记录,这只会返回第一个条件。

我还有什么遗漏的吗?

【问题讨论】:

    标签: ms-access if-statement vba eof record-count


    【解决方案1】:

    您缺少计数记录:

    If rst.EOF = False Then
        rst.MoveLast
        rst.MoveFirst
        If rst.RecordCount = 1 Then
            ' One record.
        Else
            ' More records.
        End If
    Else
        ' No records.
    End If
    

    【讨论】:

    • 我实际上得到了相同的结果——即使我在表中有两条记录,输出仍然是 rst.RecordCount = 1 的格式。
    • 那么您对记录集的查询只返回一条记录,或者记录集属于不返回记录计数的类型。如果是这样,循环记录并计数直到 EOF。
    【解决方案2】:

    根据记录集的大小,.MoveLast 会严重影响性能,因为.RecordCount 不会产生记录总数,而是访问记录的数量,因此调用.MoveLast 是必填项。

    要提供替代方案,请考虑以下事项:

    If rst.EOF Then
        ' No records
    Else
        rst.MoveFirst
        rst.MoveNext
        If rst.EOF Then
            ' 1 record
        Else
            ' More than 1 record
        End If
    End If
    

    这首先测试记录集是否已经在.EOF,如果是,则记录集中没有记录。

    如果我们有一些记录,它会将光标移动到第一条记录 (.MoveFirst),如果存在则移动到下一条记录 (.MoveNext)。

    如果我们现在已经到达.EOF,那么记录集中必须只有一条记录;否则,还有更多记录。

    由于您只需要针对只有一条记录的情况进行分支,因此此方法意味着您正在访问最少数量的记录来确定此条件。

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2022-01-02
      相关资源
      最近更新 更多