无法在打开的工作簿上运行独特的ADODB查询?
我有一个类ADOConnector
创buildADODB连接到工作簿并查询工作簿:
Private objconnection As New ADODB.Connection Sub connect(workbookPath As String) On Error GoTo errHandler objconnection.CommandTimeout = 99999999 objconnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & workbookPath & ";" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";" Exit Sub errHandler: Err.Raise Err.Number, "ADOConnector.connect", Err.Description & _ " (" & workbookPath & ")" End Sub Function WorksheetQuery(selectSQL As String) As ADODB.Recordset Dim objrecordset As New ADODB.Recordset Const adOpenStatic = 3 Const adLockOptimistic = 3 Const adCmdText = &H1 objrecordset.Open selectSQL, _ objconnection, adOpenStatic, adLockOptimistic, adCmdText If objrecordset.EOF Then Set WorksheetQuery = Nothing Exit Function End If Set WorksheetQuery = objrecordset Exit Function errHandler: Err.Raise Err.Number, "ADOConnector.WorksheetQuery", Err.Description Set WorksheetQuery = Nothing End Function
我有一个WorksheetQuery
的testing方法:
Sub testADOcon() Dim ac As New ADOConnector Dim bkPath as string bkPath = "U:\testFolder\testWorkbook.xlsx" ac.connect bkPath Dim rs As ADODB.Recordset Set rs = ac.WorksheetQuery("select distinct * from [report$]") End Sub
这种方法给出奇怪的不一致的结果:
- 如果
bkPath
的工作簿已打开,则会失败并显示以下错误:The connection for viewing your linked Microsoft Excel worksheet was lost.
- 如果
bkPath
的工作簿已closures,则会成功执行。 - 如果
bkPath
设置为bkPath = ThisWorkbook.FullName
,则它将成功执行。 - 如果SQL更改为
"select * from [report$]"
,则无论工作簿是打开还是closures,都会成功执行。
如何在另一个打开的工作簿上使用distinct
工作簿?
- 无法通过JScript更新TestComplete中的Excel工作表
- 使用VB6 ADO将数据追加到Excel列
- 无法使用VBA中的ADODB更新字段
- 在同步的OneDrive文件夹中使用Excel工作簿作为ADODB连接的ODBClocking错误
- 在vba中使用ADODB在SQL中命名variables
- VBA Excel ADODB预先载入现金数据集以更快速地查询一个大的Access数据集500000行
- 如果工作表的第一行没有列名称,如何使用ADODB连接从Excel中检索数据?
- ADODB.Recordset上的“types不匹配”错误
- 使用SQL插入到空的Excel表中,而不会丢失数据types属性