访问 VBA 代码未将变量设置为查询值

Access VBA Code not setting a variable to queried value

我对 VBA 有点陌生,已经使用它 2 个月了,但我现在卡住了。我有一个访问代码,用于从 table 中计算项目的总小时数,其中包含小时数记录。我的代码成功计算了 3 个类别的小时数,但不是最后两个。我从按项目汇总小时数的查询中提取值并将其保存到变量,然后使用正确的值更新我的项目记录。

更新:对于第 4 次检查,我使用 select 来查看它是否会比使用 IF 语句更好地工作,它最初是一个 if 语句。

非常感谢任何帮助。

我的代码如下:

Dim First As Integer
Dim Second As Integer
Dim Third As Integer
Dim Fourth As Integer
Dim Fifth As Integer
Set db = CurrentDb

Set rs = db.OpenRecordset("qryHermosaPCHoursSum1st", dbOpenDynaset, dbSeeChanges)
    rs.FindNext "PlanCheck Like " _
    & Chr(34) & "*" & Me.PlanCheck & "*" & Chr(34)

    If rs.NoMatch Then
            First = 0
        Else
            First = (rs![SumOfHours])
    End If

Set rs = db.OpenRecordset("qryHermosaPCHoursSum2nd", dbOpenDynaset, dbSeeChanges)
    rs.FindNext "PlanCheck Like " _
    & Chr(34) & "*" & Me.PlanCheck & "*" & Chr(34)

    If rs.NoMatch Then
            Second = 0
        Else
            Second = (rs![SumOfHours])
    End If

Set rs = db.OpenRecordset("qryHermosaPCHoursSum3rd", dbOpenDynaset, dbSeeChanges)
    rs.FindNext "PlanCheck Like " _
    & Chr(34) & "*" & Me.PlanCheck & "*" & Chr(34)

    If rs.NoMatch Then
            Third = 0
        Else
            Third = (rs![SumOfHours])
    End If

到目前为止一切正常。

Set rs = db.OpenRecordset("qryHermosaPCHoursSum4th", dbOpenDynaset, dbSeeChanges)
    rs.FindNext "PlanCheck Like " _
    & Chr(34) & "*" & Me.PlanCheck & "*" & Chr(34)

    Select Case True
        Case rs.NoMatch
            Fourth = 0
        Case Else
            Fourth = (rs![SumOfHours])
    End Select

当我逐行 运行 代码时,它似乎正确地获取了 rs![SumOfHours] 的值,但未能将值传递给 Fourth 和 Fifth。我有一个测试记录,其中有 15 个匹配小时,查询正确求和但代码将其保留为零。

Set rs = db.OpenRecordset("qryHermosaPCHoursSum5th", dbOpenDynaset, dbSeeChanges)
    rs.FindNext "PlanCheck Like " _
    & Chr(34) & "*" & Me.PlanCheck & "*" & Chr(34)

    If rs.NoMatch Then
            Fifth = 0
        Else
            Fifth = (rs![SumOfHours])
    End If

Set rs = db.OpenRecordset("tblHermosaBeachPC", dbOpenDynaset, dbSeeChanges)
    rs.FindNext "ID Like " _
    & Chr(34) & "*" & Me.PlanCheck & "*" & Chr(34)
    rs.Edit
        rs![1stSetHours] = First
        rs![2ndSetHours] = Second
        rs![3rdSetHours] = Third
        rs![4thSetHours] = Fourth
        rs![5thSetHours] = Fifth
    rs.Update

保存聚合数据通常是不必要的,也是糟糕的设计。需要时计算聚合数据。

单个查询应该能够计算所有 5 个聚合值,然后单个记录集可以检索字段。为什么使用通配符而不是 =?

Set rs = db.OpenRecordset("SELECT * FROM qryHermosaPCHoursSum WHERE PlanCheck = '" & Me.PlanCheck & "'", dbOpenDynaset, dbSeeChanges)

If Not rs.EOF Then
    Set rsDest = db.OpenRecordset("SELECT * FROM tblHermosaBeachPC WHERE PlanCheck = '" & Me.PlanCheck & "'", dbOpenDynaset, dbSeeChanges)
    rsDest.Edit
        rsDest![1stSetHours] = rs!First
        rsDest![2ndSetHours] = rs!Second
        rsDest![3rdSetHours] = rs!Third
        rsDest![4thSetHours] = rs!Fourth
        rsDest![5thSetHours] = rs!Fifth
    rsDest.Update
End If

或者代替 rsDest 记录集对象:

CurrentDb.Execute "UPDATE tblHermosaBeachPC SET 1stSetHours=" & rs!First & _ 
", 2ndSetHours=" & rs!Second & ", 3rdSetHours=" & rs!Third & _ 
", 4thSetHours=" & rs!Fourth & ", 5thSetHours=" & rs!Fifth & _ 
" WHERE PlanCheck = '" & Me.PlanCheck & "'"