首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在尝试将参数传递给MS Access查询

正在尝试将参数传递给MS Access查询
EN

Stack Overflow用户
提问于 2016-10-12 05:33:20
回答 3查看 507关注 0票数 0

我正在尝试写一个MS Access报告,基于一个查询,我可以编程将日期范围放在使用VBA中。我使用Between [StartDate] and [EndDate]作为条件来设置查询。然后我在一个表单上有了以下代码:

代码语言:javascript
复制
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

似乎什么都没发生。查询应该打开并显示在屏幕上吗?基于我的互联网搜索,我已经尝试了上面的几个代码变体,但都没有效果。

EN

回答 3

Stack Overflow用户

发布于 2016-10-12 07:38:33

没有发生任何事情,因为您在设置qdfrst之后没有对它们执行任何操作。我不完全确定你想要实现什么,但是:

  1. 如果要打开RecordSource为查询结果(动态设置参数)的报表,请尝试在报表的代码模块中放置以下内容:

代码语言:javascript
复制
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

在窗体中,使用以下命令打开报表:

代码语言:javascript
复制
Private Sub AutoReport1_Click()
    DoCmd.OpenReport "Report1", acViewReport
End Sub

  1. 如果您只想打开查询(动态设置参数),请尝试执行以下操作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-10-12 15:29:15

简单的方法是从查询中删除参数,并对报告应用筛选器:

代码语言:javascript
复制
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") & "#"
票数 0
EN

Stack Overflow用户

发布于 2016-10-12 17:16:52

我不认为它可以用你想要的简单的方式来做。

这似乎很遗憾,因为您遵循了可以被认为是“最佳实践”的做法,即使用带参数的存储过程,而不是构造动态SQL。

事实是,即使这通常是很好的实践,您也有责任违背访问团队希望您如何使用其软件的自然流程!看起来您必须动态构造一个WHERE子句来注入到所提供的方法中:(

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39987115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档