【发布时间】: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
我想在 VBA 中创建一个 If/Then 语句,如果记录集中有多个记录,则填充一条消息,如果只有记录,则填充另一条消息。
我现在正在使用
If rst.EOF = False Then...
Else ...
End If
不管记录集中有多少记录,这只会返回第一个条件。
我还有什么遗漏的吗?
【问题讨论】:
标签: ms-access if-statement vba eof record-count
您缺少计数记录:
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
【讨论】:
根据记录集的大小,.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,那么记录集中必须只有一条记录;否则,还有更多记录。
由于您只需要针对只有一条记录的情况进行分支,因此此方法意味着您正在访问最少数量的记录来确定此条件。
【讨论】: