【问题标题】:getting minimum value in a recordset field without Looping在没有循环的情况下在记录集字段中获取最小值
【发布时间】:2012-03-22 12:08:36
【问题描述】:

我正在使用 Access 2007 并在 VBA 中编写宏。 “分析”子例程传递一个记录集 rev_rec。该记录集有两个字段“PeriodNo”(整数)和“Revenue”(双精度)。 Minrev 是一个变量,我必须在其中存储“收入”字段的最小值。我正在使用的代码如下。

    Public Sub Analyze(rev_rec As DAO.Recordset)
    Dim Minrev As Double
    rev_rec.MoveFirst
    Minrev = rev_rec("Revenue")
    While Not rev_rec.EOF
    If rev_rec("Revenue") < Minrev Then
    Minrev = rev_rec("Revenue")
    End If
    rev_rec.MoveNext
    Wend
    rev_rec.MoveFirst
    .
    .
    .
    End Sub

我尝试将 DMin() 与记录集一起使用,但无法找到一种方法来做到这一点。有没有办法在不使用任何循环的情况下做到这一点?

【问题讨论】:

  • 我认为最好的办法是使用一条 SQL 语句构建一个新的记录集,该语句只检索一条记录,即在所需时间段内具有最小值的一条记录。另一种选择是,您可以使用收入列升序上的排序方式打开此特定记录集。这样您就知道最小值将在第一条记录中。
  • @HK1 我看不出这个答案有什么问题:)

标签: ms-access vba ms-access-2007


【解决方案1】:

我认为您最好的选择是使用仅检索一条记录的 SQL 语句构建一个新记录集,该记录在所需时间段内具有最小值。另一种选择是,您可以使用收入列升序上的排序方式打开此特定记录集。这样您就知道最小值将在第一条记录中。

Andy Brown 关于使用 DMin 的建议也应该有效。这实际上是一个非常类似于我的第一个建议的想法。

【讨论】:

  • 按“收入”排序似乎是个好主意,并解决了我的目的。谢谢。
【解决方案2】:

问题是您正在传递一个记录集。如果您只有表或查询名称(或 SQL 语句),则可以使用 DMIN。例如:

   MinRev = DMIN("Revenue","TableOrQueryNameInQuotes","")

第三个参数可以用来设置一些标准。例如:

 MinRev = DMIN("Revenue","TableOrQueryNameInQuotes","PeriodNo > 5")

但是请注意,以 D 开头的函数(DMIN、DLOOKUP、DSUM)运行速度非常慢,尽管如果您的记录少于 10,000 条,您不会注意到这一点。

【讨论】:

  • 它的问题是我只想传递一个记录集,因为记录集中的其他数据也被使用,找到最小收入只是逻辑的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2015-12-02
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多