对本地工作表的EXCEL ADODB查询不包括新插入的记录



我使用ADODB在活动工作簿中查询工作表中的数据。数据驻留在它自己的工作表中,并具有列标题。我已经将表格定义为excel的ListObject - excel的自动表格格式结构。

我像这样打开连接:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "" & _ 
   ThisWorkbook.Name & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
cn.Open strCon

然后我可以获取一个记录集使用一个简单的SQL语句:

strSQL = "SELECT * from [sheet1$]
rs.Open strSQL, cn, 0, 1  'cursortype = adOpenForwardOnly, locktype = adOpenReadonly

这一切都很好…直到我在sheet1上的表中插入新行。新行不包括在后续查询中,即使我关闭,设置为无,并重新打开连接和记录集变量在我的代码。

如果我保存并关闭工作簿,然后重新打开它,则新记录包含在查询中,这使我相信这可能是缓存问题。我搜索了ADODB缓存刷新等,但大多数结果似乎与PHP或访问有关。我还尝试了光标类型和锁类型的各种其他选项,没有任何区别。

谁能建议我如何确保每次我运行我的查询我得到所有的行,即使我在表中插入新行后?

找到了解决方案:

由于我使用的是Excel 2010,我发现我可以使用更新版本的ADODB。

所以,不像这样定义我的连接字符串:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="...

我把它改成了:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="...

,问题解决。新的插入和编辑现在显示后立即我做了他们。这还消除了OLEDB.4.0中已知的内存泄漏问题,因此这是一个额外的好处。

最新更新