查找列中的最低值 Access 2010

Find Lowest Value in Columns Access 2010

我在 Access 2010 中有一个 table,它有 3 个独立的优先级字段。我有一个 sub 可以查看列,找到最小的数字,并将其放在 Overall Priority 字段中。

例如。

SubProjNo    |   GOPri   |   StrPri    | SOPri
--------+-----------+----------+------------------

1234-12-01    |   100   |        7     |   61

1234-12-02    |         |       18     |   2

1234-12-03    |   51    |              |

ProjNo: 1234-12-00      Overall_Priority:2

我最初在 Private Sub Form_Current() 下有代码,但它使程序速度变慢太多,所以我将它移到 AfterUpdate 用于 table 所在的子表单。

Private Sub MFWorkProjectssubform_AfterUpdate()
Dim MinGOPri As Variant
Dim MinStrPri As Variant
Dim MinSOPri As Variant

MinGOPri = DMin("[GOPri]", "[WorkProjects]", "WorkProjects.PROJNO = Activity.PROJNO")
MinStrPri = DMin("[StrPri]", "[WorkProjects]", "WorkProjects.PROJNO = Activity.PROJNO")
MinSOPri = DMin("[SOPri]", "[WorkProjects]", "WorkProjects.PROJNO = Activity.PROJNO")

Overall_Priority = IIf(((IIf([MinGOPri] < [MinStrPri], [MinGOPri], [MinStrPri])))
< [MinSOPri], ((IIf([MinGOPri] < [MinStrPri], [MinGOPri], [MinStrPri]))), [MinSOPri])

End Sub

问题是,现在所有的列都清空了,只剩下最大值。如果我把它放回 Form_Current 中,如果有任何关于如何让它工作或如何加速它的建议,我们将不胜感激。

你不需要这一切。对于 Overall_Priority 文本框,使用此表达式作为 ControlSource:

=IIf(((IIf([GOPri]<[StrPri],[GOPri],[StrPri])))<[SOPri],((IIf([GOPri]<[StrPri],[GOPri],[StrPri]))),[SOPri])

为 Null 编辑并减少:

=IIf(IIf(Nz([GOPri],9999)<Nz([StrPri],9999),Nz([GOPri],9999),Nz([StrPri],9999))<Nz([SOPri],9999),IIf(Nz([GOPri],9999)<Nz([StrPri],9999),Nz([GOPri],9999),Nz([StrPri],9999)),Nz([SOPri],9999))

将其用作第四列;将其命名为 RowMin。

然后,在页脚中,使用 =Min([RowMin]) 作为总计框的控件源。

使用记录集怎么样,这是一个选项吗?

Dim rst As Object
Dim minValue As Integer
Dim fieldCounter As Long
Dim minPriority as Long
minPriority = 9999
Set rst = Me.recordsetclone

With rst
    .MoveFirst
    While Not .EOF
        For fieldCounter = 0 To .Fields.Count-1  
        if(.Fields(fieldcounter).name = "GOPri" or .Fields(fieldcounter).name = "StrPri" or .Fields(fieldcounter).name = "SOPri" ) then
        Debug.print "Now you are checking : " &.Fields(fieldcounter).Name & " with value : " & .Fields(fieldcounter) & " Current minPriority = " & minPriority
            If len(Nz(.Fields(fieldCounter),"")) > 0 Then
                If .Fields(fieldCounter) < minPriority Then minPriority = .Fields(fieldCounter)
            End If
        End if
        Next
        .MoveNext
    Wend
End With
Set rst = Nothing
Overall_Priority = minPriority

也许您需要调整 fieldCounter 以匹配您的 Table 结构
根据您的问题,这些字段从 0 -->.... 开始计数。

 Fields(0) = SubProjNo  
 Field(1) = GoPRi  

如果您希望此列始终是其他三个字段的函数,那么您可以为 table 创建一个计算字段。帮助文档可以告诉你如何做;这篇文章也给出了方向:

https://support.office.com/en-us/article/Add-a-calculated-field-to-a-table-14a60733-2580-48c2-b402-6de54fafbde3

通常,您会在 table 上定义一个新字段,并将其公式设置为其他三个字段中的最大值。然后,每当引用计算字段时,它总是会为您提供其中的最大值。

另一种选择是根本不用担心在数据输入时保存字段,只需创建一个视图,添加一个定义为三个值中最大值的字段。