Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql VB6 ADODB.Recordset Record.Count不';t工作/EOF&;转炉不可用_Sql_Excel_Vb6_Adodb_Recordset - Fatal编程技术网

Sql VB6 ADODB.Recordset Record.Count不';t工作/EOF&;转炉不可用

Sql VB6 ADODB.Recordset Record.Count不';t工作/EOF&;转炉不可用,sql,excel,vb6,adodb,recordset,Sql,Excel,Vb6,Adodb,Recordset,我有一个关于VB6中ADODB记录集的问题,这让我困惑了几个星期。我已将记录集写入工作表,以获得一些无法直接从记录集获得的结果。 但随着数据集的建立,将记录集写入工作表会减慢程序的速度,我想知道是否有人能帮我解决记录集之谜 以下是我的问题- 1) Recordcount始终返回-1 2) 错误消息“参数类型错误、超出可接受范围或相互冲突”,在集合(A)上弹出。光标定位到AduSecClient或adUseServer,以及(B)。LockType 3) 无法.getrows on records

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

以下是我的问题- 1) Recordcount始终返回-1 2) 错误消息“参数类型错误、超出可接受范围或相互冲突”,在集合(A)上弹出。光标定位到AduSecClient或adUseServer,以及(B)。LockType 3) 无法.getrows on recordset=>我认为这与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。ie:(我假设工作表名APRI是正确的,而不是APRIL-并且有一个名为Dummy的工作表列出测试结果):


IIRC
Recordcount
只能在静态光标下正常工作。您不能将服务器端游标用于工作簿。您好,谢谢您的及时回复。我尝试将“xRst.Open xSqlstring,xCnn,xadOpenKeyset,adUseServer,adLockoptimistic”修改为“xRst.Open xSqlstring,xCnn,xadOpenstatic”,记录集仍然返回-1。当我将其修改为“xRst.Open xSqlstring,xCnn,xadOpenstatic,adUseClient,adLockoptimistic”时,会弹出一条新的错误消息-“当对象打开时不允许操作”. 但删除最后两个参数后,错误消息不存在。
x
s的处理方法是什么-1通常意味着您确实有记录-您在
getrows
中遇到了什么问题?嗨,Rory,“x”是我声明变量时的习惯。对于{getrows}我得到的错误是“对象不支持此属性或方法”。在这种情况下,recordcount仍然返回-1。但是记录集应该有4条测试记录。而xRst.MoveNext命令仍然遇到错误。@FoxFeng,我刚刚用一个“表”测试了代码,它正确地为我返回了记录数(92-Northwind客户)。尝试使用adOpenKeySet。也许你在测试前更改了代码?嗨,塞廷,非常感谢你的帮助。我想我已经找到了问题的原因。我已将xCnn和xRst声明为对象,并在过程中将它们创建为“ADODB.Connection”和“ADODB.Recordset”。一旦我导入引用库,记录集就可以正常工作。
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