在Access Access 2010中找到最低价值

时间:2015-05-19 21:02:24

标签: vba ms-access access-vba ms-access-2010

我在Access 2010中有一个表,它有3个独立的优先级字段。我有一个子查看列,找到最小的数字,并将其放在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表格所在的子表单。

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,有关如何使其发挥作用的任何建议,或者如何加快速度,我将非常感激。

3 个答案:

答案 0 :(得分:2)

你不需要这一切。对于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])作为总计框的控件源。

答案 1 :(得分:1)

如何使用记录集,这是一个选项吗?

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以匹配您的表结构
根据您的问题,字段从0 - > ...开始计算。

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

答案 2 :(得分:1)

如果您希望此列始终是其他三个字段的函数,则可以为表创建计算字段。帮助文档可以告诉你如何;本文也给出了指示:

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

通常,您会在表格上定义一个新字段,并将其公式设置为其他三个字段的最大值。然后,只要引用计算字段,它就会始终为您提供最大值。

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

相关问题