【问题标题】:Access 2007 VBA DoCmd.SetParameter replacement?Access 2007 VBA DoCmd.SetParameter 替换?
【发布时间】:2014-02-27 14:11:29
【问题描述】:

我继承了一个 Access 数据库,其中包含许多表、表单和查询。但是,我是一名 PHP 程序员,而 VBA 对我来说非常陌生。我被要求进行一些更改,在几天的时间里我能够开始工作(在旧的随机 SO 帖子的帮助下)。

将数据库传回给用户后,在我的计算机上运行的代码在他们的计算机上运行不正常。看来我有 Access 2010,他们有 2007。据我所知,Access 2007 的 VBA 中不存在 DoCmd.SetParameter 函数。

这是代码的 sn-p:

DoCmd.SetParameter "ReportYear", Year.Value
DoCmd.SetParameter "ReportMonth", Month.Value
DoCmd.OpenQuery "doFillData"

doFillData 是 Access 内部的一个查询,它自动插入到另一个表中,在运行之前需要 2 个参数(年和月)。

显而易见的答案是,让他们升级到 2010,但我没有那个权力。我假设我将能够在 2007 年创建条件代码来做一些不同的事情,但我找不到类似的函数可以使用。有人有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    您不想使用DoCmd.OpenQuery,而是想操作querydef 对象的命名参数,然后执行它。以这种方式执行时,您可以使用 acFailOnError 之类的 Execute 选项(OpenQuery 不可用),您可以检测受影响的记录数。

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    
    Set db = CurrentDb
    Set qdf = db.QueryDefs("doFillData")
    qdf.Parameter("ReportYear") = Year.Value
    qdf.Parameter("ReportMonth") = Month.Value
    qdf.Execute 
    
    MsgBox qdf.RecordsAffected & " records were affected."
    

    【讨论】:

    • 谢谢,用户已经离开了一天,但我会在他们明天回来时试一试。
    • “Bang”符号——qdf!ReportYear = Year.Value——也可以。
    • 看起来这让我指出了正确的方向。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 2015-11-26
    • 2018-06-24
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多