VBA将参数添加到新查询def

Posted

技术标签:

【中文标题】VBA将参数添加到新查询def【英文标题】:VBA add parameters to new query def 【发布时间】:2016-05-15 13:45:51 【问题描述】:

这段代码运行良好:

Dim db As DAO.Database, rs As DAO.Recordset, qd As DAO.QueryDef

Set db = CurrentDb
Set qd = db.QueryDefs("query1")
qd.Parameters("[cou]").Value = "BE"
Set rs = qd.OpenRecordset
Do Until rs.EOF
    Debug.Print rs!title, rs!country_fk
    rs.MoveNext
Loop
rs.Close

但是当我尝试通过创建 querydef 而不是使用现有的来达到相同的结果时,qd.Parameters 行出现错误。

Set db = CurrentDb
Set qd = db.CreateQueryDef
qd.SQL = "PARAMETERS [cou] Text ( 255 ); SELECT TOP 10 Title, Country_fk FROM dbo_Client WHERE Country_fk=[cou];"
qd.Parameters("[cou]").Value = "BE"

Set rs = qd.OpenRecordset
Do Until rs.EOF
...

我注意到 qd.Parameters.Count = 0 并且 qd.Parameters.Add 是不允许的。 有什么解决办法吗?谢谢

【问题讨论】:

【参考方案1】:

如果你给QueryDef 一个名字,你的第二个例子应该可以工作。如果您希望它是临时的QueryDef,请使用空字符串作为名称...

'Set qd = db.CreateQueryDef
Set qd = db.CreateQueryDef(vbNullString)

【讨论】:

确实如此。我现在觉得有点傻。我应该删除问题吗? 我不这么认为,帕特里克。它应该可以帮助其他读者理解 QueryDef 必须是“命名的”(即使只有一个空字符串作为名称),以便 Access 识别 Parameters。另外,我认为这很有趣;我以前从未注意到这个问题。 :-)

以上是关于VBA将参数添加到新查询def的主要内容,如果未能解决你的问题,请参考以下文章

在vba中从查询填充数组然后将数据插入表中

VBA、ADO.Connection 和查询参数

将参数传递给查询访问 VBA

在 vba 的插入查询中设置日期参数?

向 VBA 代码添加条件并重新查询

VBA/SQL 参数化查询 - 字段列表中的未知列