VBA查询返回空值

时间:2019-02-03 12:53:23

标签: ms-access access-vba

使用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

2 个答案:

答案 0 :(得分:1)

您的查询可能返回一个空的记录集。假设您有数据,这很可能意味着您的HAVING子句正在过滤出您想要的记录。

我记得,Access中的日期文字必须采用#1/30/2019#格式:[EventDate] > 1/30/2019形式的子句不会评估您想要的方式。

因此,请尝试用#将这些日期参数括起来:

[OurEvents].[EventDate])> #" & Me.DateFrom.Value & "#"

严格来说,应该避免从字符串中组合查询(由于SQL注入攻击的可能性):您应该对它们进行参数化并传递参数值。但是,在Access中比在其他形式的SQL中更难做到。

答案 1 :(得分:0)

您必须将日期值格式化为有效的string expressions

"WHERE ((([OurEvents].[EventDate])> #" & Format(Me.DateFrom.Value, "yyyy\/mm\/dd") & "# And ([OurEvents]![EventDate])< #" & Format(Me.DateTo.Value, "yyyy\/mm\/dd") & "#));"