【问题标题】:MS Access query not receiving parameter from VBAMS Access 查询未从 VBA 接收参数
【发布时间】:2014-10-16 14:38:31
【问题描述】:

我有一个附加查询,它将值从一个表 (tbl_LSI) 复制到另一个表 (tbl_LSI_USD):

qry_Append_to_LTI_USD:

INSERT INTO tbl_LTI_USD
SELECT *
FROM tbl_LTI AS lti
WHERE lti.LTI_ID=[Forms]![frm_LTI]![LTI_ID];

我在frm_LTI 形式的AfterUpdate 事件上调用此查询,它从字段LTI_ID 中获取LTI_ID。我使用的 VBA 是:

db.Execute "qry_Append_to_LTI_USD", dbFailOnError

我有这个完全相同的代码适用于不同的表单和表格组合,但由于某种原因,当我尝试执行这个代码时它失败并要求输入参数:

Run-time error '3061'
Too few parameters. Expected 1

表单之间的唯一区别是这个(frm_LTI)是modal & popup = Yes,而工作表单modal & popup = No

VBA 代码可以看到 debug.print[frm_LTI]![LTI_ID] 的值,但它不会传递给查询。 (我有一个截图显示了这个,但没有足够的声望点来上传它)。

这与表单的 modal/popup 属性有什么关系,还是我缺少其他东西?

【问题讨论】:

  • 简单的做法是不要使用查询,而是使用 docmd.setwarnings false; Docmd.RunSQL "INSERT INTO tbl_LTI_USD SELECT * FROM tbl_LTI WHERE LTI_ID = " & LTI_ID; docmd.Setwarnings true
  • 谢谢,这似乎有效。你知道为什么我尝试使用的方法失败了吗?
  • 不,但我推荐这个,因为这意味着逻辑是本地的形式,(因为你没有使用外部对象,即查询)这简化了问题并使它如果问题仍然存在,更容易解决任何困难

标签: sql ms-access vba


【解决方案1】:

当您遇到Execute 的此类问题时,特别是带有子查询的透视查询。尝试用这个WHERE lti.LTI_ID=eval("[Forms]![frm_LTI]![LTI_ID]"); 替换WHERE lti.LTI_ID=[Forms]![frm_LTI]![LTI_ID];。但有时也需要类型转换(以日期为例):WHERE lti.LTI_ID=cDbl(eval("[Forms]![frm_LTI]![LTI_ID]"));

【讨论】:

  • 谢谢,很好地解决了这个问题。不过,我想我会使用 John Bingham 的建议,将 SQL 保留在表单中。
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
相关资源
最近更新 更多