.ldb文件我正在写的MS Outlook(2003)宏,它使用ADO连接到Access数据库(2003)。我只是打开一个连接,获取一些记录到Recordset中,我用它来填充网格(但不绑定)。然后关闭Recordset和Connection,并将它们都设置为Nothing。ADO连接访问留下
不是火箭科学吗?但是,上面的过程实际上创建了一个MSACCESS.EXE实例,并为Access数据库创建了一个.ldb文件,在关闭连接,记录集,宏和Outlook本身之后,这两个文件仍然保留。这些残留中的一个或两个都会阻止打开Access数据库,直到手动终止MSACCESS.EXE进程并删除.ldb文件。我可以在任何地方找到类似的帖子说“关闭连接”,但这并不能解决问题。
这里的VBA代码:
Screen.MousePointer = vbHourglass
Set db = New ADODB.Connection 'Declared at module level
Set rs = New ADODB.Recordset 'Declared at module level
Dim sSQL As String
sSQL = "SELECT Customers.ContactFirstName As Name, Customers.ContactLastName As Surname, Customers.EmailName AS Email, Customers.Address, Customers.Area, Customers.Town FROM qryCustomersWithEmail ORDER BY Customers.ContactLastName ASC"
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\My Documents\Tables.mdb;Persist Security Info=False"
rs.Open sSQL, db, adOpenStatic, adLockReadOnly
If rs.RecordCount > 0 Then
'actions performed on recordset removed
End If
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
Screen.MousePointer = vbDefault
将是巨大的,如果有人可以提供帮助。 (附注:这是Vista系统)
顺便说一句,来解释为什么我这样做,我想提供我的客户有一个简单的方法来发送大量电子邮件,大家都在他的Access数据库。我已经通过从Access访问Outlook来尝试这种方式,但Outlook的同样令人生气的安全“功能”对每个创建的电子邮件弹出一条警告消息,这使得这种方法变得很糟糕。
更新 我更新了这与我的调查结果,这是真正奇怪的原因。
我删除了PopulateFlexGrid并且问题仍然出现,只是为了打开和关闭记录集。我从这个示例中省略的代码,因为我认为它不相关的是我用Screen.MousePointer = vbHourglass包装了代码,最后是开始和Screen.MousePointer = vbDefault。我删除了这个,问题不再发生。在我调用Screen.MousePointer = vbHourglass时,我看到MSACCESS.EXE在TM中启动。当我看到这种情况发生时,我无法相信自己的眼睛。
我也尝试了一个版本,我用DAO代替了ADO,没有其他区别,它的工作原理没有创建.ldb或启动MSACCESS.exe。这适用于那里的Screen.Mousepointer代码。
有人可以解释吗?
哪些版本的Outlook和Access? – 2009-11-30 13:42:10
你在网络上运行这个吗?如果是这样,请检查是否有任何网络集中器或其他设备可能会缓存您的ldb? – heferav 2009-11-30 13:43:43
不,它在一台机器上没有网络涉及 – Sheed 2009-11-30 13:51:50