我正在使用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 Cache Flush等,但大多数结果似乎与PHP或Access有关。我还尝试了光标类型和锁定类型的各种其他选项,没有区别。
任何人都可以建议我如何确保每次运行查询时,即使在表格中插入新行,我也会得到所有行?
答案 0 :(得分:1)
找出解决方案:
由于我使用的是Excel 2010,因此我发现可以使用较新版本的ADODB。
所以,不要像这样定义我的连接字符串:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="...
我把它更改为:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="...
问题解决了。新的插入和编辑现在在我制作后立即显示。这也消除了OLEDB.4.0中已知内存泄漏的问题,因此这是一个奖励。