ADO记录集返回旧(陈旧)数据

ADO记录集返回旧(陈旧)数据

问题描述:

我写了VBA代码,它使用ADODB记录集从Excel工作表中检索数据以填充用户表单。每次运行代码时,工作表被替换为新数据。ADO记录集返回旧(陈旧)数据

就在几个星期前,我开始有一个问题,即记录集对象不会返回正确的数据,而是返回以前会话中使用的数据。甚至在关闭Excel文件并重新打开之后也会发生这种情况。

例如,我将运行数据集A的代码,然后关闭Excel文件。我重新打开Excel文件,用数据集B替换工作表,然后运行代码。它不会返回数据集B,而会返回数据集A.发生这种情况时,我确认工作表实际上包含数据集B,而不是A. 为了提供更多背景信息,我相信当我从使用ACE连接字符串而不是JET。我被迫做了这个转换,因为我开始用JET连接字符串得到错误。我使用的连接字符串可以在下面找到。

我很感谢任何与此问题有关的反馈。如果需要更多信息,请告诉我。

strConnString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & mstrFile & ";Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1""" 
+0

有几个问题。首先,这个VBA代码驻留在哪里?我假设它不在包含数据的同一个Excel文件中,在这种情况下,它并不重要。如果VBA代码位于不同的文件/应用程序中,那么包含数据的Excel实际上并不需要打开代码才能工作。其次,你说你重新打开Excel,更改数据,然后再次运行代码 - 在重新运行代码之前,你是否保存更改的Excel? – Skippy

+0

VBA代码驻留在启用宏的Excel文件中,数据(在工作表中)也是如此。在重新运行代码之前,不会保存Excel文件。 –

+0

VBA代码和数据都在*相同* Excel文件中?那么为什么你需要连接字符串呢?但是,如果您使用连接字符串,则不保存文件可能会导致您的问题。在编辑文件时,连接字符串将指向文件的原始未保存副本。在运行代码之前保存文件,看看它是否有效。 – Skippy

此问题已解决(感谢Skippy)。将新数据导入工作表后保存文件解决了问题。在不保存文件的情况下,连接指向包含陈旧数据的文件版本。