【发布时间】:2014-06-13 22:45:57
【问题描述】:
我正在使用 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 有关。我还尝试了光标类型和锁定类型的各种其他选项,没有区别。
谁能建议我如何确保每次运行查询时都能获得所有行,即使在表中插入新行之后也是如此?
【问题讨论】:
-
我刚刚测试了一些,发现即使我编辑了表中的单个值,编辑也不会在查询中通过 - 它仍然会带回旧值。