我正在尝试写一个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似乎什么都没发生。查询应该打开并显示在屏幕上吗?基于我的互联网搜索,我已经尝试了上面的几个代码变体,但都没有效果。
发布于 2016-10-12 07:38:33
没有发生任何事情,因为您在设置qdf和rst之后没有对它们执行任何操作。我不完全确定你想要实现什么,但是:
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 SubPublic 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发布于 2016-10-12 15:29:15
简单的方法是从查询中删除参数,并对报告应用筛选器:
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") & "#"发布于 2016-10-12 17:16:52
我不认为它可以用你想要的简单的方式来做。
这似乎很遗憾,因为您遵循了可以被认为是“最佳实践”的做法,即使用带参数的存储过程,而不是构造动态SQL。
事实是,即使这通常是很好的实践,您也有责任违背访问团队希望您如何使用其软件的自然流程!看起来您必须动态构造一个WHERE子句来注入到所提供的方法中:(
https://stackoverflow.com/questions/39987115
复制相似问题