У меня есть база данных доступа, расположенная в общей папке на сетевом диске.
Доступ к нему осуществляется с нескольких компьютеров через Excel. Пользователи имеют разрешение на обновление и изменение базы данных через лист Excel. База данных доступна в виде встроенной таблицы на листе Excel.
Я работаю в Excel 2007.
Чтобы это работало, у меня автоматически запускается макрос, который изменяет путь к источнику данных на путь к компьютеру. Например, на моем компьютере они могут располагаться по адресу C:/accessDB.accdb, а на компьютере пользователя X данные могут располагаться по адресу Z:/accessDB.accdb.
Обновление, которое выполняется, выглядит следующим образом:
Dim connString As String
Dim folderLoc As String
Dim cn As WorkbookConnection
Dim oledbCn As OLEDBConnection
Set cn = ThisWorkbook.Connections(local_table)
Set oledbCn = cn.OLEDBConnection
folderLoc = ThisWorkbook _
.sheets(settingSheet) _
.Range(settingDbFileFolder).Value _
& "\" & _
ThisWorkbook _
.sheets(settingSheet) _
.Range(settingDbFileName).Value
connString = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & _
folderLoc & _
";Mode=Share Deny None;Extended Properties=" & Chr(34) & Chr(34) & ";Jet OLEDB:System database=" & Chr(34) & Chr(34) & _
";Jet OLEDB:Registry Path=" & Chr(34) & Chr(34) & ";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=1" & _
";Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=" & Chr(34) & Chr(34) & _
";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False" & _
";Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"
If oledbCn.Connection <> connString Then
oledbCn.Connection = connString
End If
Когда это будет сделано, я перебираю соединения с базой данных и обновляю соединения с базой данных. Код выглядит следующим образом:
Dim conn As OLEDBConnection
If ThisWorkbook.Connections.Item(I).name = databaseName Then
Set conn = ThisWorkbook.Connections.Item(I).OLEDBConnection
conn.SourceDataFile = ""
conn.Refresh
conn.MaintainConnection = False
End If
Это работает нормально в течение нескольких месяцев. Однако после того, как мои коллеги перезагрузили свои компьютеры, в точке conn.Refresh
я получаю сообщение об ошибке на их компьютерах, но не на моем следующего содержания:
Run-time error '-2147417848 (80010108'
Method 'Refresh of object 'OLEDBConnection' failed
Объект соединения выглядит так:
Свойства подключения выглядят так:
Будем признательны за любую помощь или руководство, это очень неприятная ошибка, поскольку она работает уже несколько месяцев без каких-либо ошибок, не говоря уже о том, что она отлично работает на моем ПК.