sql - VB6 ADODB.Recordset Record.Count 不起作用/EOF 和 BOF 不可用

标签 sql excel vb6 adodb recordset

我有一个关于 VB6 中的 ADODB 记录集的问题,这让我困惑了几个星期。我已将记录集写入工作表以实现一些我无法直接从记录集中获得的结果。
但是随着数据集的建立,将记录集写入工作表会减慢程序的速度,我想知道是否有人可以为我解决记录集难题。

以下是我遇到的问题 -
1) xRst.Recordcount 总是返回 -1
2) 错误消息“参数类型错误、超出可接受范围或相互冲突”,在设置 (A) .cursorlocation 到 adUseClient 或 adUseServer 和 (B) .LockType 时弹出
3) 无法在记录集上 .getrows => 我相信这与 xRst.Recordcount 返回 -1 的原因相同?

以下是我的代码的一部分。上述问题可能是由提供商的限制引起的吗?

xConnstring = "Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties='Excel 12.0'; Data Source =" & Thisworkbook.fullname
xCnn.Open xConnstring
xSqlstring = " SELECT * FROM [APRI$] "
Set xRst = xCnn.Execute(xSqlstring)
Msgbox(xRst.RecordCount)
Do Until xRst.EOF
     ......
     xRst.MoveNext
Loop

对于记录集,我也尝试了两种开放方法,但也不起作用。
Set xRst.ActiveConnection = xCnn
xRst.Source = xSqlstring
xRst.CursorType = adOpenDynamic
------Error Message Occurs On Below Two Lines------
xRst.CursorLocation = adUseServer
xRst.LockType = adLockOptimistic
xRst.Open

下面的代码会遇到错误,但是去掉最后两个参数的时候会通过
xRst.Open xSqlstring, xCnn, adOpenKeyset, adUseServer, adLockoptimistic

有人可以请告诉我如何获得 1)recordset.recordcount,2)recordset.movenext 工作吗?

提前致谢。

最佳答案

默认光标类型是 adOpenForwardOnly。对于 adOpenForwardOnly 或 adOpenUnspecified,记录计数始终返回为 -1。使用 adOpenKeySet 或 adOpenStatic。即:(我假设工作表名称 APRI 是正确的,而不是 APRIL - 并且有一个名为 Dummy 的工作表来列出测试结果):

Dim xCnn As ADODB.Connection
Dim xRst As ADODB.Recordset
Dim xConnString As String

xConnString = "Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties='Excel 12.0'; Data Source =" & ThisWorkbook.FullName
Set xCnn = New ADODB.Connection
xCnn.Open xConnString
xSqlstring = " SELECT * FROM [APRI$] "
Set xRst = New ADODB.Recordset
xRst.Open xSqlstring, xCnn, adOpenStatic
MsgBox (xRst.RecordCount)
Dim row As Integer
row = 1
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Dummy")
Do Until xRst.EOF
    '...
    ws.Cells(row, 1).Value = xRst.Fields(0).Value
    row = row + 1
     xRst.MoveNext
Loop

关于sql - VB6 ADODB.Recordset Record.Count 不起作用/EOF 和 BOF 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58954217/

相关文章:

sql - 在 Firebird 脚本中创建表导致 "unsuccessful metadata update"出现死锁

c# - 读取 Excel 工作表,并在读取后添加到列表框。 C#

sql - Excel/VBA : How to paste SQL query with proper string formatting

sql-server - 将 MS-SQL 数据导入 Access Table ADO

php - 在mysql中查找一个整数的排名

MySQL错误1111(HY000): Invalid use of group function

python - 如何使用 python 以易于放入 Excel 的格式将集合列表打印到文件中,消除所有不需要的字符?

vb.net - 包含表单的 .NET 类库中的 SetCompatibleTextRenderingDefault

c# - 压缩 XML 指标。

sql - 在oracle sql中查找两个日期之间耗时