打开报表时使用查询dao.recordset

时间:2014-07-17 04:57:26

标签: access-vba ms-access-2010

我正在尝试使用这个小小的vba代码来填写我正在整理的报告中的一些文本框,而没有任何运气在谷歌上找到任何东西。

Function GetTotals()
      Dim db As DAO.Database
      Dim qdef As DAO.QueryDef
      Dim rst As DAO.Recordset
10        Set db = DBEngine(0)(0)
20        Set qdef = db.QueryDefs("FoodLogDetails")
30        Set rst = qdef.OpenRecordset(dbOpenDynaset)
40        If rst.RecordCount = 0 Then GoTo Cleanup
50            rst.MoveFirst
60            Do Until rst.EOF
70                Select Case qdef![WhichMeal]
71                    Case "Breafast" 'if matched add to the textbox and so on for the others
80                        txtBrkCalTot = txtBrkCalTot + TotalCalories 'total calories +
90                    Case "AM Snack"

100                   Case "Lunch"

110                   Case "PM Snack"

120                   Case "Dinner"

130                   Case "Evening Snack"

140               End Select
150               rst.MoveNext
160           Loop
170       Debug.Print WhichMeal
Cleanup:
180       db.Close
190       qdef.Close
200       rst.Close
210       Set qdef = Nothing
220       Exit Function
End Function

我尝试了不同的东西并且不断出现不同的错误。我使用当前剪辑得到的是第30行,运行时错误#3061 - 参数太少。预期1.我正在使用我的记录集的查询和报告所绑定的相同的查询。我已在我的应用程序的其他部分使用此代码,它工作正常。但它与表格和子表格一起使用而不是报告。我想这可能与它有关但不确定。我甚至尝试过 - 设置rst = db.OpenRecordset(“FoodLogDetails”) - 没有querydef部分,具有相同的错误消息。如果有人可以帮助我肯定会很感激哦!我忘记了。我正在使用2013年访问权限。

史蒂芬

1 个答案:

答案 0 :(得分:0)

我建议的解决方案非常简单。我只是使用缩放为我的文本框并粘贴在以下内容中:

=round(Sum(IIf([WhichMeal]="Breakfast",[TotalCalories],null)),0) 

哪一餐必须与所选信息相匹配"早餐"如果是这样的话,总卡路里的总和就放在文本框中。我为另外11个文本框执行了此操作以获取不同的值。我将数字四舍五入以防止它们超出我文本框的界限,我不会详细了解它的外观,只是各种令人讨厌的东西。所以没有必要使用vba代码。建议这个的人救了我很多警告,我非常感谢这个人。很抱歉没有把这个添加到我的上一篇文章中,只是我很高兴我得到了修复,并且在最后一分钟,我只是思考并没有思考。

所以Yall远离麻烦

史蒂芬

相关问题