【问题标题】:Setting the Recordset property of an Access form设置 Access 表单的 Recordset 属性
【发布时间】:2014-05-30 20:47:04
【问题描述】:

出现运行时错误“438”,对象不支持此属性或方法。

编辑:完整代码,DB_CONNECTION 是公开的,并且设置在不同的模块中并且它正在工作。

Function subFormUpdate()
Dim rs As New ADODB.Recordset


With rs
.ActiveConnection = DB_CONNECTION
.Open "SELECT * FROM napr"
End With

If rs.EOF Then

DB_CONNECTION.Execute "CREATE TABLE napr(" _
                & " num int(2) not null unique, " _
                & "name varchar(255) null );"
End If

With Forms!Main!FormDirections!TableDirSubForm.Form
.Recordset = rs
.Requery
End With

End Function

在“.Recordset = rs”上获取它,其中“rs”是一个 ADODB 记录集。

表单只是一个空白子表单。为了查看表单上的记录集,我是否需要执行其他操作?

【问题讨论】:

  • 该错误表明您的对象 .Recordset 没有这样的方法 .Form -- 它与缺少引用无关。
  • 好吧,好吧,但在这种情况下我该怎么办?因为应该有这样的方法,甚至被智能感知检测到。
  • 试试Set .Recordset = rs
  • 运行时错误 7965,当我使用 'Set .Recordset = rs' 执行此操作时,您输入的对象不是有效的 Recordset 属性
  • 你能给我们更多的背景信息吗?

标签: vba ms-access


【解决方案1】:

Form.Recordset 返回的记录集类型取决于您使用的文件类型,您无法控制它。如果您使用的是本机 Access 文件,则记录集将是 DAO。如果您使用 ADP,则记录集将是 ADO。 ADP 在 2013 版中已弃用,但这就是帮助说明 Recordset 属性可以是任何一种类型的原因。

您可能的问题(一旦正确包含 Set 关键字)是您试图将 ADODB.Recordset 对象分配给 DAO.Recordset2 对象。您可以在断点处使用 TypeName 函数来确认它。将您的记录集更改为 DAO 即可。

【讨论】:

  • 所以我猜我要么必须切换到 DAO 记录集,要么将我的项目从 MDB 移动到 ADP。当我读到 ADP 很适合用作 SQL Server 的前端时,这就是我想要做的,但是如何将我的 MDB 前端(表单、它们的逻辑等)传输到 ADP?或者 DAO 的使用会改变什么?
  • ADP 在 2013 年被弃用,所以我不会在其中投入任何资金。在我看来,使用 DAO 没有缺点。我经常在同一个项目中使用两者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多