【问题标题】:VBA: Recordset.Fields "Object doesn't support this property"VBA:Recordset.Fields“对象不支持此属性”
【发布时间】:2012-03-14 03:41:25
【问题描述】:

我正在尝试遍历每个记录集上的字段并将它们的值添加到我的 Excel 2007 工作表中。

我有以下代码,但每当它到达“For Each x In..”时,我都会收到“对象不支持此属性” 我错过了什么吗?我是否需要在 VBA 中添加其他引用才能使用 .Fields?我目前在我的参考资料中使用 Microsoft ActiveX Data Objects 6.0 Library。 SQL 查询 Oracle 数据库,但我认为这与此错误无关。

Set recSet = newConn.getOpenIncidents("exampleworkgroup")
Set Path = ThisWorkbook.Worksheets("Incidents")
iRow = 2

With Path
    iCol = 1
    For Each x In recSet.Fields
        .Cells(iRow, iCol).Value = x.Value  'Customer Name
        iCol = iCol + 1
    Next
End With 

这是我课堂上的函数代码

Public Function getOpenIncidents(ByVal wrkgp As String)
    Set rs = New ADODB.Recordset
    Dim SQL As String

    SQL = "SELECT intbl.cust_ky, intbl.incid_id, intbl.OPEN_TS, intbl.CLOSE_TS, wrkgptbl.wrkgp_id, intbl.incid_ttl_dn " _
        & "FROM (MAIN.testtable intbl INNER JOIN MAIN.wrkgrp wrkgptbl ON intbl.curr_wrkgp_ky=wrkgptbl.wrkgp_ky) " _
        & "WHERE wrkgptbl.wrkgp_id='" & wrkgp & "'"

    rs.Open SQL, con, adOpenKeyset
    rs.MoveFirst
    getOpenIncidents = rs

End Function

【问题讨论】:

  • 如果您在 For Each 之前尝试 recSet.Fields.Count 会发生什么?
  • recSet 实际上是一个记录集吗?您的 GetOpenIncidents() 函数返回一个 Variant 并且函数中也没有 Set
  • @creamyegg 我没有将 recSet 声明为记录集。但是从函数中获取变体后不应该是一个吗?我在 recSet 上添加了 watch,我可以看到里面有 6 个项目。我如何迭代这 6 个项目?
  • @p.campbell 我试过了。得到相同的错误“对象不支持此属性或方法”:((
  • 我也得到了 recSet.Close 的“对象不支持此属性或方法”。开始怀疑我是否使用了正确的参考资料,或者是否需要添加其他参考资料。

标签: vba excel excel-2007 ado adodb


【解决方案1】:

我想我已经发现了! recSet 实际上是字段类型。因此没有 .Fields 属性,因为 .Fields 是 Recordset 对象的属性。

修复应该是:

For Each x In recSet

或者更改getOpenIncidents()方法返回一个RecordSet(包括将返回行改为Set getOpenIncidents = rs)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 2011-01-04
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多