【问题标题】:Issue Passing Query Parameters to Report - Text Params Work, Date Params Don't将查询参数传递给报告的问题 - 文本参数有效,日期参数无效
【发布时间】:2021-09-30 03:32:16
【问题描述】:

所以我有以下查询(仅相关部分):

Private Sub Search_Button_Click()

DoCmd.SetParameter "[FromForm_Bldg]", Nz([Forms]![MAIN MENU]!FromForm_Bldg.Value, "")
DoCmd.SetParameter "[FromForm_Associate]", Nz([Forms]![MAIN MENU]!FromForm_Associate.Value, "")
DoCmd.SetParameter "[FromForm_StartDate]", "'" & [Forms]![MAIN MENU]!FromForm_StartDate & "'"
DoCmd.SetParameter "[FromForm_EndDate]", "'" & [Forms]![MAIN MENU]!FromForm_EndDate & "'"

DoCmd.OpenReport "ALL MOVES", acViewReport, , , , "[FromForm_Bldg]=" & Param1 & "|" & "D2=" & Param2

结束子

还有这个 Access SQL 查询:

PARAMETERS
[FromForm_Bldg] Text ( 255 ),
[FromForm_Associate] Text ( 255 ),
[FromForm_StartDate] DateTime,
[FromForm_EndDate] DateTime;

SELECT
Max(QUERY_BY_TOTAL.ACT_DATE) AS ACT_DATE,
Max(QUERY_BY_TOTAL.BLDG) AS BLDG,
QUERY_BY_TOTAL.ASSOCIATE AS ASSOCIATE,

FROM
QUERY_BY_TOTAL

WHERE
(((QUERY_BY_TOTAL.BLDG)=[FromForm_Bldg])
AND ((QUERY_BY_TOTAL.ACT_DATE)>=[FromForm_StartDate] And (QUERY_BY_TOTAL.ACT_DATE) <=[FromForm_EndDate])
AND ((QUERY_BY_TOTAL.ASSOCIATE)=[FromForm_Associate])) OR (((QUERY_BY_TOTAL.ACT_DATE)>=[FromForm_StartDate] And (QUERY_BY_TOTAL.ACT_DATE)<=[FromForm_EndDate])
AND ((QUERY_BY_TOTAL.ASSOCIATE)=[FromForm_Associate])
AND (([FromForm_Bldg]) Is Null)) OR (((QUERY_BY_TOTAL.BLDG)=[FromForm_Bldg])
AND ((QUERY_BY_TOTAL.ACT_DATE)>=[FromForm_StartDate] And (QUERY_BY_TOTAL.ACT_DATE)<=[FromForm_EndDate])
AND (([FromForm_Associate]) Is Null)) OR (((QUERY_BY_TOTAL.ACT_DATE)>=[FromForm_StartDate] And (QUERY_BY_TOTAL.ACT_DATE)<=[FromForm_EndDate])
AND (([FromForm_Bldg]) Is Null)
AND (([FromForm_Associate]) Is Null))

GROUP BY
QUERY_BY_TOTAL.ASSOCIATE

我尝试使用表单中的参数填写的报告不会填充任何数据,我 99% 确定问题出在日期上,因为 vba 的前 2 个参数没有问题但在第一个数据参数处出错。我已经玩了一个星期的日期和格式,感觉很失败。

也就是说,我确实有一个 VBA 宏,它使用参数获取此查询数据,并将其全部放入电子邮件的正文中,完美运行。作为参考,这里是电子邮件宏:

'CREATE TABLE HEADER
    Dim xMailBody As String
    xMailBody = "<TABLE Border=""1"", Cellspacing=""0""><TR>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">BLDG&nbsp;</p></Font></TD>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">ASSOCIATE&nbsp;</p></Font></TD>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">PICKING&nbsp;</p></Font></TD>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">FLOOR MOVES&nbsp;</p></Font></TD>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">LOADOUT&nbsp;</p></Font></TD>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">PUTAWAY&nbsp;</p></Font></TD>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">STAGING&nbsp;</p></Font></TD>" & _
    "<TD Bgcolor=""#0642a1"", Align=""Center""><Font Color=#FCDFFF><b><p style=""font-size:16px"">TOTAL&nbsp;</p></Font></TD>" & _
    "</TR>"

'SELECT TABLE DATA
    Dim MyDb As DAO.Database
    Dim Myqdf As DAO.QueryDef
    Dim rs As DAO.Recordset
    Dim MyQueryName As String

    MyQueryName = "DATA_BY_TOTAL"
    Set MyDb = CurrentDb()
    Set Myqdf = MyDb.QueryDefs(MyQueryName)

'SET PARAMETER VALUES
    Myqdf.Parameters("[FromForm_Bldg]") = Nz([Forms]![MAIN MENU]!FromForm_Bldg.Value, "")
    Myqdf.Parameters("[FromForm_Associate]") = Nz([Forms]![MAIN MENU]!FromForm_Associate.Value, "")
    Myqdf.Parameters("[FromForm_StartDate]") = [Forms]![MAIN MENU]!FromForm_StartDate
    Myqdf.Parameters("[FromForm_EndDate]") = [Forms]![MAIN MENU]!FromForm_EndDate

    Set rs = Myqdf.OpenRecordset()
    rs.MoveFirst
    Do While Not rs.EOF

    'LOOP THROUGH COLUMNS TO CREATE TABLE
        xMailBody = xMailBody & "<TR>" & _
        "<TD><center>" & rs.Fields![ACT_DATE].Value & "</TD>" & _
        "<TD><center>" & rs.Fields![ASSOCIATE].Value & "</TD>" & _
        "<TD><center>" & rs.Fields![PK].Value & "</TD>" & _
        "<TD><center>" & rs.Fields![FM].Value & "</TD>" & _
        "<TD><center>" & rs.Fields![LO].Value & "</TD>" & _
        "<TD><center>" & rs.Fields![AW].Value & "</TD>" & _
        "<TD><center>" & rs.Fields![IS].Value & "</TD>" & _
        "<TD><center>" & rs.Fields![TOTAL].Value & "</TD>" & _
        "</TR>"
    
    'END LOOP
        rs.MoveNext
        Loop

我这辈子都无法获得具有相同参数的相同查询数据来填写该当报告。我已经确认源/查询数据的日期格式与我表单上的日期输入字段相同,所以我不知道为什么它不起作用。

帮助!请帮忙!

【问题讨论】:

  • 不幸的是,这似乎没有什么不同。必须尝试过 100 种不同的引号、撇号、# 符号等组合,其中任何一种都没有骰子。

标签: sql date ms-access parameters


【解决方案1】:

对日期值使用字符串表达式将起作用,您应该在这些上强制使用 ISO 序列 (yyyy-mm-dd):

DoCmd.SetParameter "[FromForm_StartDate]", "#" & Format([Forms]![MAIN MENU]!FromForm_StartDate, "yyyy\/mm\/dd") & "#"
DoCmd.SetParameter "[FromForm_EndDate]", "#" & Format([Forms]![MAIN MENU]!FromForm_EndDate, "yyyy\/mm\/dd") & "#"

另外,请确保 QUERY_BY_TOTAL.ACT_DATE 返回日期值,而不是格式化文本。

【讨论】:

  • 真诚地感谢您的回复,但这仍然会产生一个空的报告。将查询中的日期参数类型设置为“带时间的日期”,报告为空,因此我还尝试将类型设置为短文本,这会导致错误“表达式太复杂,无法评估...”: (
  • 然后检查您的查询 (DoCmd.OpenQuery ....)。它可能不返回设置了日期间隔的记录。
  • 更改了 VBA 以打开查询而不是报告,您是正确的,它是空的。但是,当我从左侧的导航窗格中打开报告并在弹出窗口中手动键入参数(并从我的表单中复制/粘贴原本将在日期参数中使用的确切日期)时,它可以完美运行。我不明白。 刘海放在桌子上
  • 让查询返回[Forms]![MAIN MENU]!FromForm_EndDate和其他值并研究输出。
  • 仍然没有骰子。我什至在我的 VBA 中使用了 MsgBox 来返回所有参数值,并且它们完全按照应有的方式返回。不知何故,这两个日期值没有正确传递给查询。这实际上是一个障碍,使我无法修复其他 6 个我可以真正使用的类似数据库:(
【解决方案2】:

解决了这个问题:

DoCmd.SetParameter "[FromForm_StartDate]", "#" & Format([Forms]![MAIN MENU]!FromForm_StartDate, "m/d/yyyy 05:00") & "#"
DoCmd.SetParameter "[FromForm_EndDate]", "#" & Format([Forms]![MAIN MENU]!FromForm_EndDate, "m/d/yyyy 04:59") & "#"
DoCmd.SetParameter "[FromForm_Bldg]", [Forms]![MAIN MENU]!FromForm_Bldg.Value
DoCmd.SetParameter "[FromForm_Associate]", [Forms]![MAIN MENU]!FromForm_Associate.Value

并且通过在我的查询 SQL 中使用“Like [ParameterName]”,当我希望参数评估为空时,表单字段中的参数值为“*”。因此,对于我的实际参数,此示例将提取 21 年 7 月 26 日至 21 年 7 月 27 日的数据,并包括所有建筑物和所有用户/关联:

但是,现在我被卡住了,因为我想在另一个查询中使用相同的参数,但它不起作用。 New question created here.

【讨论】:

    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2014-11-02
    相关资源
    最近更新 更多