Sql ListObject的ADO查询只返回错误记录计数的空值
我有下面的过程,通过ADO查询ListObjectSql ListObject的ADO查询只返回错误记录计数的空值,sql,excel,vba,ado,listobject,Sql,Excel,Vba,Ado,Listobject,我有下面的过程,通过ADO查询ListObject Dim cnn As ADODB.Connection Set cnn = New ADODB.Connection cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";" cnn.O
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
cnn.Open
Dim tblRange As String
tblRange = quoteWK.ListObjects("quoteWKStateInfo").Range().Address(False, False)
Dim strSQL As String
strSQL = "SELECT WkStateCd FROM [quoteWK$" & tblRange & "]"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open strSQL, cnn, adOpenStatic, adLockPessimistic
然而,当表有198条记录时,记录集只返回23条记录。此外,每个字段的值都为空(debug.print rs.Fields(0).value
)
我在网上搜索了很多,但是没有看到这个问题。我还玩过CursorType
和LockType
。我在下面放置了我认为重要的信息以及一张桌子的图片
?tblRange | Q4:AG206
?strSQL | SELECT WkStateCd FROM [quoteWK$Q4:AG206]
?rs.Fields(0).Value | Null
?rs.RecordCount | 23
?rs.Fields.Count | 1 'this is correct
另外,FWIW,当我对表运行selectdistinct
时,没有返回任何记录。WkStateCd列中有15个不同的状态
我遇到了一个奇怪的问题,即使用ADO将表的开头放在A1以外的地方。例如,在表格开始之前插入行会减少
记录计数
。如果可以将表重新定向为从A1开始,这可能会有所帮助。或者,您是否考虑过使用高级过滤器或其他方法来获得类似的结果?@RyanWildry-谢谢。是的,我可以使用高级过滤器或其他选项。我的同事通过ADO进行构建,因为它通常速度更快,但也有一些怪癖,我在过去也发现了这一点。让我们知道将表移动到A1开始是否有效。@RyanWildry-你知道什么。这就解决了问题。然而,考虑到工作簿设计可以在任何地方都有表格,这是一个相当糟糕的解决方案!如果有人能发布一个更健壮、更动态的解决方案,那就太好了。试着不要使用LockType
。例如,打开记录集,如:rs.open strSQL、cnn、adOpenStatic