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

我对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工作?

先感谢堆。

zcg345 回答:VB6 ADODB.Recordset Record.Count不起作用/ EOF和BOF不可用

默认光标类型为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
本文链接:https://www.f2er.com/3065988.html

大家都在问