gpt4 book ai didi

vba - ADODB 记录集记录计数始终返回 -1

转载 作者:行者123 更新时间:2023-12-04 00:34:18 25 4
gpt4 key购买 nike

我正在尝试从 MS Access 中的数据库中检索数据以 Excel 格式。然而,recordset 的 recordcount 属性总是返回 -1,尽管出于其他目的代码工作正常。

我使用的代码如下: `子数据记录集()

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`

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

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

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

最佳答案

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

Set oRS = CreateObject("ADODB.Recordset")
oRS.CursorLocation = adUseClient
oRS.Open sSQL, cn
当 ADO 无法确定记录数或者提供程序或游标类型不支持 RecordCount 时,

ADO 的 recordcount 属性返回 -1。最后一个对于这个案例是正确的。

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

关于vba - ADODB 记录集记录计数始终返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46129543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com