ADODB 记录集记录计数总是返回 -1

ANA*_*WAL 3 excel ms-access vba

我正在尝试在 MS 访问中检索数据以形成数据库。然而,记录集的 recordcount 属性总是返回 -1,但出于其他目的,代码工作正常。

我使用的代码如下:`Sub datarecordset()

Dim cn As adodb.Connection
Dim oRs As adodb.Recordset
Set cn = CreateObject("ADODB.Connection")
DBPath = "C:\[databse path]" & "\[database name].accdb"
dbWs = "[excel sheet name]"
scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath
dsh = "[" & "[excel sheet name]" & "$]"
cn.Open scn
Dim sSQL As String

Dim F As Integer

sSQL = "Select 'W',a.[Subledger],NULL,sum(a.[Amount]) from GL_Table a where a.[Opex_Group] = 10003 and year(a.[G/L Date]) = " & Year(Sheets("Repairs").Cells(1, 4)) & " and month(a.[G/L Date]) = " & Month(Sheets("Repairs").Cells(1, 4))
sSQL = sSQL & " group by " & "a.[Subledger],(year(a.[G/L Date])),(month(a.[G/L Date]))"
Set oRs = cn.Execute(sSQL)
Debug.Print oRs.RecordCount
oRs.Close
....... further code to print to excel here

cn.Close
End Sub`
Run Code Online (Sandbox Code Playgroud)

该代码将获取记录集中的数据并写入 excel。但是由于记录集属性不返回记录计数,因此无法将记录集中各个字段的值打印到 Excel 工作表的不同单元格。

我在谷歌上搜索并了解到我需要声明记录集类型,为此我必须使用 connection.open 代替 connection.execute。但是我正在尝试更改代码,然后它给出了错误对象变量或未定义变量。

欢迎任何快速帮助。谢谢。

Eri*_*k A 6

@BitAccesser 的链接提供了有效的解决方案。在您的情况下快速实施:而不是Set oRs = cn.Execute(sSQL)

Set oRS = CreateObject("ADODB.Recordset")
oRS.CursorLocation = adUseClient
oRS.Open sSQL, cn
Run Code Online (Sandbox Code Playgroud)

ADO当 ADO 无法确定记录数或者提供程序或游标类型不支持 RecordCount 时, 的 recordcount 属性返回 -1。对于这种情况,最后一个是正确的。

为了避免这种情况,有几种解决方案。最简单的方法是使用客户端游标,我刚刚演示了这一点,但@BitAccesser 在链接中提供了更多替代解决方案