我正在尝试根据查询编写MS Access报告,我可以通过编程方式将日期范围用于使用VBA。我以Between [StartDate] and [EndDate]
为标准设置了查询。然后我在表单上有以下代码:
Private Sub AutoReport1_Click()
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Set qdf = CurrentDb.QueryDefs("MixByRangeA")
qdf.Parameters("StartDate").Value = #10/2/2014#
qdf.Parameters("EndDate").Value = #11/2/2014#
Set rst = qdf.OpenRecordset()
End Sub
似乎没有发生任何事情。查询应该打开并显示在屏幕上吗?我根据我的互联网搜索尝试了上面的一些代码变体,但没有任何作用。
答案 0 :(得分:1)
没有任何事情发生,因为您在设置qdf
和rst
后没有做任何事情。我不完全确定你想要完成什么,但是:
1.如果要打开其RecordSource
是查询结果的报告(动态设置参数),请尝试将以下内容放在报告的代码模块中:
Private Sub Report_Open(Cancel As Integer)
Dim db As DAO.Database: Set db = CurrentDb
Dim qdf As DAO.QueryDef
Dim sql As String
Set qdf = db.QueryDefs("MixByRangeA")
sql = qdf.sql
sql = Replace(sql, "[StartDate]", "#10/2/2014#")
sql = Replace(sql, "[EndDate]", "#11/2/2014#")
Me.RecordSource = sql
On Error Resume Next
qdf.Close: Set qdf = Nothing
db.Close: Set db = Nothing
End Sub
在表格中,使用此功能打开报告:
Private Sub AutoReport1_Click()
DoCmd.OpenReport "Report1", acViewReport
End Sub
2.如果您只想打开查询(动态设置参数),请尝试以下操作:
Public Sub AutoReport1_Click()
Dim db As DAO.Database: Set db = CurrentDb
Dim qdf As DAO.QueryDef
Dim sql As String
Set qdf = db.QueryDefs("MixByRangeA")
sql = qdf.sql
sql = Replace(sql, "[StartDate]", "#10/2/2014#")
sql = Replace(sql, "[EndDate]", "#11/2/2014#")
qdf.sql = sql
DoCmd.OpenQuery (qdf.Name)
On Error Resume Next
qdf.Close: Set qdf = Nothing
db.Close: Set db = Nothing
End Sub
答案 1 :(得分:0)
简单方法是从查询中删除参数并将过滤器应用于报告:
Dim StartDate As Date
Dim EndDate As Date
StartDate = #10/2/2014#
EndDate = #11/2/2014#
DoCmd.OpenReport "YourReport", , , "[YourDateField] Between #" & Format(StartDate, "yyyy\/mm\/dd") & "# And #" & Format(EndDate, "yyyy\/mm\/dd") & "#"
答案 2 :(得分:0)
我认为不能以你想要的简单方式完成。
这看起来很遗憾,因为您通过使用带参数参数的存储过程而不是构造动态SQL来遵循可被视为“最佳实践”的内容。
事实是,即使一般来说这是一种好习惯,但你仍然违背了Access团队希望你使用其软件的自然流程!看起来你被迫动态构造一个WHERE
子句来喷入提供的方法:(