【问题标题】:MS Access 2010 Run-Time Error '2467'MS Access 2010 运行时错误“2467”
【发布时间】:2012-09-06 13:18:03
【问题描述】:

我有一个 MS Access 2010 应用程序,它在后端链接到 MS SQL 2008。

当我运行应用程序时,遇到运行时错误“2467” - 您输入的表达式引用了一个已关闭或不存在的对象。

当我选择调试时,该行指向:

Forms!FRM_MAIN_HOME!FRM_SUB_EDIT.Form.RecordSource =

我已经在 SSMS 中运行了查询并且工作正常。

我查找了缺失的参考文献,但没有。

当我使用 Shift 运行应用程序来呈现表单时,我得到一个不同的错误:条件表达式中的数据类型不匹配。这次我没有调试选项,但我怀疑这是真正的问题。

还有一件事:当我在不同的数据库上运行这个应用程序时,它加载时没有错误。

非常感谢任何帮助。

谢谢。


Forms!FRM_MAIN_HOME!FRM_SUB_EDIT.Form.RecordSource = _
   "SELECT V.VendorNumber, V.VendorName, T.DocumentNumber, " _
   & "T.DocumentDate, T.AmountInc, T.GSTClaim, T.GSTBatch " _
   & "FROM TBL_VENDOR_MASTER AS V INNER JOIN TBL_GST_01_TRANSACTIONS AS T " _ 
   & "ON V.AAVendorID = T.AAVendorID WHERE T.GSTBatch =" _
   & Me.BATCH_NUM & " ORDER BY V.VendorName" 

当我在 SSMS 中运行此代码时,它运行良好。此外,当我选择不同的数据库时,它可以正常工作。

【问题讨论】:

  • FRM_MAIN_HOME 是否打开?是启动形式吗?什么是正常工作的查询?手动打开启动表单并单步执行代码会发生什么?
  • 表单即将打开,我收到错误消息。该查询从表中选择一条记录。当我手动打开表单时,我得到了不匹配数据类型的另一个错误。
  • 查询是什么,我的意思是请发布sql。需要的表单不应该打开,它必须打开。

标签: sql-server-2008 ms-access runtime-error


【解决方案1】:

我打赌你在错误的事件中运行这个。您不能使用 Open 事件来引用窗体上的控件。我不确定您为什么要动态设置子表单记录源。

记录源应该是:

SELECT V.VendorNumber, 
       V.VendorName,
       T.DocumentNumber,
       T.DocumentDate, 
       T.AmountInc,
       T.GSTClaim,
       T.GSTBatch 
FROM TBL_VENDOR_MASTER AS V 
INNER JOIN TBL_GST_01_TRANSACTIONS AS T 
ON V.AAVendorID = T.AAVendorID 
ORDER BY V.VendorName

你应该像这样设置链接字段:

Link child field : GSTBatch
Link master field : BATCH_NUM 

【讨论】:

  • 记录源从数据库中检索一些记录以显示在应用程序中。更改代码不会破坏与其他数据库的操作吗?另外,如何设置链接字段?
  • 链接字段是子表单控件的属性。子表单由子表单控件和包含的表单组成。如何访问子窗体控件的属性取决于您使用的 MS 访问版本的特定扩展。如果您的手稳定,您可以单击包含的表单外部周围的细线。当您在数据选项卡上看到链接字段时,您将知道您拥有正确的控件,该控件将被称为 FRM_SUB_EDIT。
  • 谢谢,但这不起作用。我在 FRM_SUB_EDIT 中设置了链接字段,当我运行应用程序并选择我的数据库时,我收到一个弹出窗口,要求输入参数 GSTBatch,然后输入 Batch_Num。
  • 这是一个不同的问题。你的代码是 Me.BATCH_NUM,如果它在主窗体中不可用,它将从哪里获得 Me.BATCH_NUM?当您将我回复中的 sql 粘贴到 MS Access 查询设计窗口、sql 视图并运行时,是否会提示您输入参数?
  • 不知何故,不确定如何,Me.Batch_Num 等于 1。这个查询是在 Form_Current() 声明之后的几行。当我在 MS Access (GSTBatch = 1) 中创建相同的查询时,我得到了正确的记录。考虑到当我使用不同的数据库(相同的结构)时没有出现错误,是否可能是这个特定数据库的问题,更准确地说,是这个特定数据库中的数据?
【解决方案2】:

这个问题似乎与一些内存问题有关,因为表很大(而且我的机器不是最快的......),但是在 MS Access 运行时出现的错误消息(每次我点击一个字段、选项卡或其他任何东西,我会得到相同的错误,只是没有调试选项),与我拥有的一个表有关,MS Access 不喜欢我在那里的一个字段。

为了解决这个错误,我加载了一个较旧的备份,并开始更新一些列并测试 MS Access,直到我发现问题。另外,我添加了一些索引,并在注册表中将 ODBC 的默认超时时间更改为 0(无限制)。

这似乎解决了这个问题。

【讨论】:

    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多