我在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
,有关如何使其发挥作用的任何建议,或者如何加快速度,我将非常感激。
答案 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)
如果您希望此列始终是其他三个字段的函数,则可以为表创建计算字段。帮助文档可以告诉你如何;本文也给出了指示:
通常,您会在表格上定义一个新字段,并将其公式设置为其他三个字段的最大值。然后,只要引用计算字段,它就会始终为您提供最大值。
另一种选择是在数据输入时根本不用担心保存字段,只需创建一个视图,添加一个定义为三个值中最大值的字段。