【发布时间】:2014-10-18 04:08:27
【问题描述】:
我有一个 Access 2010 数据库,该数据库链接到 SQL Azure 后端(是的,我知道这并不理想,并且正在逐步淘汰)。在后端,我有一个存储过程,我想在每次加载新记录时使用它来填充只读子表单。我试图通过在 VBA 中生成记录集,然后设置子窗体的 RecordSet 属性来做到这一点。它确实有效,但有一个令人讨厌的副作用。
当我设置RecordSet 属性时,它似乎也在设置子表单的RecordSource 属性。 RecordSource 是 Access 无法解析的,因为它是对后端的调用。如果我尝试使用 DAO 直通查询来生成记录集,RecordSource 看起来像:
EXEC dbo.GetDuplicateAddressesByManufacturer N'...', N'...', N'...'
如果我尝试使用 ADO 命令生成记录集,它看起来像:
{ call dbo.GetDuplicateAddressesByManufacturer ?, ?, ? }
只要我尝试移动到下一条记录,Access 就会引发错误,因为它首先尝试为子表单加载新记录,并且无法打开它所看到的子表单的 RecordSource。如果我正在尝试 DAO 路由,它会告诉我“无效的 SQL 语句”,如果我使用 ADO,它会告诉我“无法初始化数据提供程序”。
有人知道我该如何解决这个问题吗?难道不设置 RecordSource 就可以设置 RecordSet 属性吗?我可以发誓我以前做过,但也许我从来没有注意到 RecordSource 也被设置了。
如果做不到这一点,有没有办法可以在 Form_Current 事件之前插入一些代码来删除子表单的 RecordSource?我每次用来设置 RecordSet 的代码都很好用——问题是在我的代码工作之前引发的错误。关闭错误消息后,一切正常,但显然我不希望用户每次更改记录时都收到错误消息。
如果所有其他方法都失败了,我想我总是可以使用查询来填充本地临时表,但每次有人移动到新记录时似乎都会产生很多开销。
【问题讨论】:
标签: sql-server vba ms-access