使用Access中的查询生成器,我可以找到总数,但是我需要使用vba代码生成器来找到总数。此处给出的代码为我提供了一个空值。
Dim rst As DAO.Recordset
Dim dbs As Database
Dim strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT Sum(GiftRcvd.Rcvdamount) AS SumOfRcvdamount FROM OurEvents INNER JOIN GiftRcvd ON OurEvents.EventName = GiftRcvd.EventName " & _
"WHERE ((([OurEvents].[EventDate])>" & Me.DateFrom.Value & " And ([OurEvents]![EventDate])< " & Me.DateTo.Value & "));"
Set rst = dbs.OpenRecordset(strSQL)
SumOfRcvdamount = rst![SumOfRcvdamount]
MsgBox SumOfRcvdamount
您的查询可能返回一个空的记录集。假设您有数据,这很可能意味着您的HAVING
子句正在过滤出您想要的记录。
[我记得,Access中的日期文字必须采用#1/30/2019#
格式:[EventDate] > 1/30/2019
形式的子句不会评估您想要的方式。
因此,请尝试将这些日期参数用#
括起来:
[OurEvents].[EventDate])> "#" & Me.DateFrom.Value & "#"
严格来说,应避免从字符串中组合查询(由于SQL注入攻击的可能性):您应该参数化它们并传递参数值。但是,在Access中比在其他形式的SQL中更难做到。
您必须将日期值格式化为有效的string expressions
:
"WHERE ((([OurEvents].[EventDate])> #" & Format(Me.DateFrom.Value, "yyyy\/mm\/dd") & "# And ([OurEvents]![EventDate])< #" & Format(Me.DateTo.Value, "yyyy\/mm\/dd") & "#));"