【问题标题】:CurrentDb.Execute Error 3061 and DAO.Recordset ErrorCurrentDb.Execute 错误 3061 和 DAO.Recordset 错误
【发布时间】:2021-06-09 22:26:47
【问题描述】:

在表单上,​​用户可以选择值 1 或 2。此数字位于名为 CountVal 的未绑定控件上。

当用户选择提交按钮时,将运行更新查询。以下是查询。

UPDATE UserData_T SET UserQuantity = Forms!MainUser_F!CountVal.value;

查询在单独运行时按应有的方式运行。当我在提交按钮单击事件中调用它时,问题就出现了。我使用CurrentDb.Execute 方法。这个方法抛出一个

“参数太少”的 3061 错误。

我通过大量研究发现,基于控制的参数不适用于执行方法。当我将值设置为 1 或 2 但不是通过控件时,它可以工作。我需要有这种动态。

我也尝试过DAO.Database.OpenRecordset() 方法,但是我正在努力循环遍历每条记录。从逻辑上讲,我会倾向于 for each 但我没有找到任何关于将此循环与 DAO 记录集一起使用的参考资料。另外,循环遍历记录集不会非常慢吗?我还可以在查询本身中添加一个 if 语句吗?

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    在 MS Access 中,存储的查询可以将打开的表单或报表控件作为参数引用。但是,通过 CurrentDb.Execute 等 DAO 方法调用的查询看不到 GUI 界面,因此无法评估表单或报告控件。

    所以要继续按原样使用表单控件,只需将您的 SQL 语句保存为存储查询并使用 DoCmd.OpenQuery 调用它(对于像 UPDATEINSERT、@987654327 这样的操作查询不需要关闭它@)。这是通过导航窗格单击存储查询的编码对应项。

    DoCmd.OpenQuery "mySavedUpdateQuery"
    

    请注意以上将引发数据更改的提示。要禁止此类提示,请使用DoCmd.SetWarnings:

    DoCmd.SetWarnings False
    DoCmd.OpenQuery "mySavedUpdateQuery"
    DoCmd.SetWarnings True
    

    【讨论】:

    • 非常感谢!这解决了我的问题。
    【解决方案2】:

    您必须连接该值来构建 SQL:

    Dim Sql As String
    
    Sql = "UPDATE UserData_T SET UserQuantity = " & Forms!MainUser_F!CountVal.Value & ""
    

    【讨论】:

    • 在末尾添加一个带有& "" 的空字符串对结果字符串没有任何影响。放下它!
    • @OlivierJacot-Descombes:这是为了完成 - 表明你没有忘记结束语或八字。如果不是根据您的喜好,您可以离开它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多