【问题标题】:EXCEL ADODB Query on local worksheet not Including newly inserted records本地工作表上的 EXCEL ADODB 查询不包括新插入的记录
【发布时间】: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 有关。我还尝试了光标类型和锁定类型的各种其他选项,没有区别。

谁能建议我如何确保每次运行查询时都能获得所有行,即使在表中插入新行之后也是如此?

【问题讨论】:

  • 我刚刚测试了一些,发现即使我编辑了表中的单个值,编辑也不会在查询中通过 - 它仍然会带回旧值。

标签: sql excel vba adodb


【解决方案1】:

想出了一个解决办法:

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

所以,不要像这样定义我的连接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="...

我改成这样了:

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

问题就解决了。新的插入和编辑现在会在我制作后立即显示出来。这也消除了 OLEDB.4.0 中已知的内存泄漏问题,所以这是一个奖励。

【讨论】:

  • 谢谢。我刚刚遇到了同样的问题,在未保存的文件中新创建的工作表对 ADODB 不可见,并且使用 ACE 提供程序解决了这个问题。
猜你喜欢
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多