VBA查询返回空值

问题描述 投票:0回答:2

使用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
ms-access access-vba
2个回答
1
投票

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

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

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

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

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


0
投票

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

"WHERE ((([OurEvents].[EventDate])> #" & Format(Me.DateFrom.Value, "yyyy\/mm\/dd") & "# And ([OurEvents]![EventDate])< #" & Format(Me.DateTo.Value, "yyyy\/mm\/dd") & "#));"
© www.soinside.com 2019 - 2024. All rights reserved.