Access VBA中的参数太少但在“查询”构建器中有效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Access VBA中的参数太少但在“查询”构建器中有效相关的知识,希望对你有一定的参考价值。

我使用下面的SQL,如果我从查询生成器运行它,它工作正常,但一旦我把它放在VBA中它会抛出一个错误:

码:

With CurrentDb.CreateQueryDef("", "SELECT [_tbl_Structure].[User Name], tbl_Genesys_Daily.Field32, [_tbl_Structure].[Supervisor Emp Num], [_tbl_Structure].Supervisor FROM _tbl_Structure RIGHT JOIN tbl_Genesys_Daily ON [_tbl_Structure].[User ID] = tbl_Genesys_Daily.Field5 WHERE ((([_tbl_Structure].Supervisor)=?));")
            .Parameters(0) = [Forms]![frm_Manager_Stats_NEW]![Text279]  
            Set lvxObj = AvailabilityCap.Object
                Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
        End With

错误:

参数太少。预期1.(运行时3061)

任何帮助理解为什么这适用于一个而不是另一个,这是值得赞赏的

答案

基于表单和报表的参数仅在GUI上下文中可用(使用GUI,表单,报表,宏和DoCmd.RunSQL运行查询)。您可能正在通过CurrentDb执行此操作,并且需要使用querydef。

With CurrentDb.CreateQueryDef("", "SELECT [_tbl_Structure].[User Name], tbl_Genesys_Daily.Field32, [_tbl_Structure].[Supervisor Emp Num], [_tbl_Structure].Supervisor FROM _tbl_Structure RIGHT JOIN tbl_Genesys_Daily ON [_tbl_Structure].[User ID] = tbl_Genesys_Daily.Field5 WHERE ((([_tbl_Structure].Supervisor)=?));")
    .Parameters(0) = [Forms]![frm_Manager_Stats_NEW]![Text279]
    Set rs = .OpenRecordset
End With

您可以在this answer中了解有关不同类型参数以及何时使用哪一个参数的更多信息

以上是关于Access VBA中的参数太少但在“查询”构建器中有效的主要内容,如果未能解决你的问题,请参考以下文章

尝试连接到 R 中的 Microsoft Access 数据库的“参数太少”

Doctrine查询构建器 - 参数太少

MS Access SQL 参数太少。预计 4

访问 VBA 错误“参数太少。应为 1”

VBA OpenRecordset Producing 参数太少。预期 2. 错误

VBA 代码中的 MS Access SQL 查询