【发布时间】:2013-04-16 16:06:11
【问题描述】:
我正在尝试使用 vb6 从 excel (2003) 电子表格中提取值表,其结果需要存储在 (adodb) 记录集中。该表如下所示:
名称 Option.1 Option.2 Option.3 Option.4 Option.5 Option.6 -------------------------------------------------- --------------- 姓名1 2 3 4 姓名2 2 3 4 姓名3 2 3 4 姓名4 2 3 4 姓名5 2 3 4 姓名6 2 3 4 姓名7 2 3 4 姓名8 2 3 4 姓名9 2 3 4 5 6 7在连接并执行查询“SELECT * FROM [Sheet1$]”或什至特定列的“SELECT [Option#6] FROM [Sheet1$]”(见脚注 1)并循环遍历结果时,我得到了 Null 行 Name9 的值, Option.4 --> Option.6 而不是正确的值 5、6 和 7。似乎与电子表格的连接正在使用“最佳猜测”来确定有效的表格限制是什么,并且只需要一组考虑到行数。
要连接到电子表格,我尝试了两个连接提供程序 Microsoft.Jet.OLEDB.4.0 和 MSDASQL 并遇到了同样的问题。
以下是我使用的连接设置:
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=Excel 8.0;"
- - - - OR - - - -
.Provider = "MSDASQL"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & filePath & ";MaxScanRows=0;"
.CursorLocation = adUseClient
.Open
End With
Set rsSelects = New ADODB.Recordset
Set rsSelects = cn.Execute("SELECT [Option#5] FROM " & "[" & strTbl & "]")
只有当行数超过 8 行(不包括列名)时才会出现此问题,并且我为 MSDASQL 连接设置了 MaxScanRow=0,但这产生了相同的结果。
我包括的值得注意的项目参考是:
- MS ActiveX 数据对象 2.8 库
- MS ActiveX 数据对象 Recordset 2.8 库
- MS Excel 11.0 对象库
- MS 数据绑定集合 VB 6.0 (SP4)
非常感谢您对此事的任何帮助!
(1) 出于某种原因,当列名中包含小数点时,会被解释为#。
谢谢大家!在尝试从KB155512 onedaywhen 的优秀post 以“编程方式”设置Schema.ini 的过程中,我指出了解决方案:
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
我会鼓励任何有类似问题的人阅读帖子和 cmets,因为解决方案因人而异。
【问题讨论】:
标签: excel vb6 oledb adodb msdasql