我有一个关于VB6中ADODB记录集的问题,这让我困惑了好几个星期。我已经将记录集写入工作表中,以获得一些无法直接从记录集中获得的结果。但随着数据集的积累,将记录集写入工作表会减慢程序的速度,我想知道是否有人能为我解决记录集难题
以下是我遇到的问题-1( xRst.Recordcount总是返回-12( 错误消息,"参数类型错误、超出可接受范围或彼此冲突",在集合(A(上弹出。游标定位到adUseClient或adUseServer,以及(B(.LockType3( 无法在记录集上.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(记录集。记录数,2(记录集,下一份工作吗?
提前表示感谢。
默认游标类型为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