Nano Hash - криптовалюты, майнинг, программирование

Excel VBA: ошибка обновления подключения

У меня есть база данных доступа, расположенная в общей папке на сетевом диске.

Доступ к нему осуществляется с нескольких компьютеров через 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

Объект соединения выглядит так:

Свойства подключения выглядят так:

Будем признательны за любую помощь или руководство, это очень неприятная ошибка, поскольку она работает уже несколько месяцев без каких-либо ошибок, не говоря уже о том, что она отлично работает на моем ПК.


  • У меня была похожая проблема с SQL-сервером, где у всех остальных возникали ошибки при попытке доступа к базе данных, но я мог без проблем получать доступ и редактировать. Проблема заключалась в том, что когда я перенес базу данных, права доступа каким-то образом изменились, и мне пришлось вернуться и отредактировать права этой группы пользователей для базы данных. 21.12.2015

Ответы:


1

Похоже, это связано не с кодом, а со всем, что связано с разрешениями пользователя Windows для общего файла на диске, с которого я к нему обращаюсь (спасибо NinjaLlama за то, что указал мне правильное направление). Помещение этого в стандартную базу данных, очевидно, является правильным решением, однако ограничения ИТ пока не позволяют этого сделать.

Чтобы заставить его работать, я открыл пустой экземпляр Excel на ПК пользователя. Затем я перешел к данным -> «Из доступа» и щелкнул файл .accdb. Затем я просмотрел все различные шаги, и он импортировал таблицу Access на лист. Затем я закрыл этот лист, но не экземпляр. Затем я открыл файл в экземпляре, запустил макрос и о чудо, он обновился без каких-либо проблем.

Такое подключение, очевидно, разблокировало некоторые разрешения где-то в файловой системе/в файле. Хотя на самом деле это не решение, это, по крайней мере, важный шаг к выяснению источника ошибки.

21.12.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..