Я пишу макрос MS Outlook (2003), который использует подключение ADO к базе данных доступа (2003). Я просто открываю соединение, получая некоторые записи в наборе записей, который я использую для заполнения сетки (но не привязки). Затем я закрываю Recordset и Connection и устанавливаю оба значения Nothing.ADO Connection to Access оставляет файл .ldb за
Не ракетостроение не так ли? Но у меня возникает проблема беспризорности, когда вышеупомянутый процесс фактически создает экземпляр MSACCESS.EXE и файл .ldb для Access DB, оба из которых остаются после того, как я закрыл сам Connection, Recordset, Macro и Outlook. Один или оба этих остатка препятствуют открытию базы данных доступа до тех пор, пока процесс 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
Было бы здорово, если кто-то может помочь. (P.S. это на Vista)
Как в сторону, чтобы объяснить, почему я это делаю, я хотел предоставить моему клиенту простой способ отправить массовые электронные письма всем в своей базе данных Access. Я пробовал это, обратившись к Outlook из Access, но так же безответственно «особенность» безопасности Outlook, которая выводит предупреждающее сообщение для каждого созданного письма, подталкивает этот подход.
ОБНОВЛЕНИЕ Я обновляю это своими выводами о причине этого, что действительно странно.
Я удалил PopulateFlexGrid, и проблема все еще возникала только для открытия и закрытия набора записей. Код, который я пропустил из этого примера, поскольку я считал несущественным, что я завернул код с помощью Screen.MousePointer = vbHourglass, в начале и Screen.MousePointer = vbDefault, в конце. Я удалил это, и проблема больше не возникает. Поступая, я вижу, что MSACCESS.EXE запускается в TM, когда я вызываю Screen.MousePointer = vbHourglass. Я не могу поверить своим глазам, когда вижу это.
Я также пробовал версию, где я использовал DAO вместо ADO, никакой другой разницы, и он работает без создания .ldb или запуска MSACCESS.exe. Это работает с кодом Screen.Mousepointer.
Может кто-нибудь объяснить это?
Какие версии Outlook и Access? –
Вы используете это через сеть? Если да, проверьте, есть ли какие-либо сетевые концентраторы или другие устройства, которые могут кэшировать ваш ldb? – heferav
Нет, он на одной машине не задействован в сети – Sheed