【问题标题】:Parameter box appearing when running SQL statement in VBAVBA运行SQL语句出现参数框
【发布时间】:2015-04-03 11:14:06
【问题描述】:

我有以下在 Access 设计模式下工作的更新查询。我已将其插入到 VBA 过程中,并希望通过将其声明为变量来使用用户的 Windows ID 更新记录集 -

    UserName = Environ$("Username")

    UpdateSQL = "UPDATE ChecklistResults SET ManagerID = " & UserName & " " _
    & "WHERE (((ChecklistResults.ClientID)=Forms!TeamLeader!ComClientNotFin)" _
    & "And ((ChecklistResults.DateofChecklist)=Forms!TeamLeader!ComDateSelect)" _
    & "And ((ChecklistResults.ManagerID) Is Null));"

DoCmd.RunSQL UpdateSQL

我的问题是,当我单击命令按钮运行该过程时,会出现一个消息框,其中我的 Windows ID 作为标题,它要求“输入参数值”而不是直接将其插入表中。我不确定,但似乎 SQL 语句不正确,因为 windows ID 没有作为变量被拾取

【问题讨论】:

    标签: sql ms-access vba ms-access-2007


    【解决方案1】:

    在用户名值周围添加引号,以便数据库引擎将其解释为文字文本字符串而不是参数名称。

    该更改应该可以解决您的直接问题。除此之外,在WHEREAND 之前包含空格。还可以使用 DAO 的 Execute 方法执行查询并包含 dbFailOnError 选项。

    UpdateSQL = "UPDATE ChecklistResults SET ManagerID = '" & UserName & "'" _
        & " WHERE ClientID=Forms!TeamLeader!ComClientNotFin" _
        & " And DateofChecklist=Forms!TeamLeader!ComDateSelect" _
        & " And ManagerID Is Null;"
    Debug.Print UpdateSQL
    'DoCmd.RunSQL UpdateSQL
    CurrentDb.Execute UpdateSQL, dbFailOnError
    

    【讨论】:

    • 感谢 HansUp,它似乎正在拾取 Windows ID,因为它正在立即窗口中打印,但我现在收到运行时错误 3061。 “参数太少。预计为 2”
    • 从即时窗口复制完成的语句并将其粘贴到 Access 查询设计器中新查询的 SQL 视图中。当你从那里运行它时,参数的名称是什么?
    • 每个参数前面都有 ChecklistResults。 (表的名称)。我已将其复制到 VBA 中,但仍然收到相同的错误消息。当我运行它时它的 docmd.runsql 路由它工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多