Запрашивает базу данных Access в папке SharePoint, создает файл «.laccdb» в корзине

#vba #ms-access #sharepoint

#vba #ms-access #sharepoint

Вопрос:

Как и в строке темы, выполнение инструкции SELECT для этой базы данных из макроса Excel помещает файл «.laccdb» в корзину — есть ли способ избежать этого?

VBA:

 Sub QueryDbOnSP()
    Dim cn As Object
    Dim rs As Object
    Dim cnStr As String
    Dim qryStr As String
    Dim WebDavStr As String
    
    WebDavStr = "\....myDbName.accdb"
    Set cn = CreateObject("ADODB.Connection")
    cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" amp; WebDavStr
    qryStr = "SELECT * FROM [Table1];"
    cn.Open cnStr
    Set rs = cn.Execute(qryStr)
    'rest of code

End Sub
  

Комментарии:

1. Вероятно, нет. Это может быть нормальным поведением. Прочитайте, что это говорит об использовании корзины SharePoint support.microsoft.com/en-us/office /…

2. Спасибо за это, @June7. В части корзины этой статьи говорится о базе данных, связанной со списком SharePoint, и о том, как можно просматривать и восстанавливать удаленные записи. Моя база данных не связана ни с какими списками, она просто находится в папке SharePoint, и простой оператор Select помещает . файл laccdb (не записи) в корзине.

Ответ №1:

В зависимости от того, как именно вы запрашиваете Access, вы можете запрашивать в эксклюзивном режиме.

Эксклюзивный режим блокирует файл и, следовательно, не создает и не удаляет .файл laccdb, поскольку весь файл заблокирован.

Для подключения OLEDB вы подключаетесь в эксклюзивном режиме, добавляя Mode=Share Exclusive; в строку подключения.

Однако SharePoint автоматически удаляет эти файлы в любом случае (в зависимости от конфигурации, но обычно). Он автоматически отправляет вам сообщения об этих файлах, если вы удаляете их много, но простое почтовое правило блокирует их или помещает в почтовый ящик с низким приоритетом.

Комментарии:

1. спасибо, я добавил свой код в исходное сообщение. Кроме того, после вашего ответа провел небольшое исследование «эксклюзивного режима», но не нашел решения.

2. Для тех, кто прочитает это в будущем — блокировку файла базы данных, который поставляется с эксклюзивным режимом, нельзя игнорировать. В ходе сегодняшнего тестирования я увидел, что, когда файл базы данных был заблокирован пользователем A, выполняющим код для чтения данных, и, пока он был заблокирован на эти несколько секунд, пользователь B попытался получить к нему доступ, запустив свой код, пользователь B получил сообщение об ошибке, но, что более тревожно, файл базы данных был заблокирован пользователем A, выполняющим код для чтения данных.файл базы данных перешел в постоянное состояние «извлечено», и его нужно было удалить из SharePoint и добавить снова (его даже нельзя было переопределить, пришлось удалить).

3. @tsdn Обратите внимание, что Access НЕ поддерживает одновременный доступ нескольких пользователей к одной и той же базе данных через что-либо, кроме SMB (и даже с SMB, будьте осторожны . Если у вас несколько пользователей, использующих одну и ту же базу данных, пока она хранится в SharePoint, это проблема, если вы используете эксклюзивные блокировки, вы получаете конфликт блокировок, который оставляет его «проверенным», если вы этого не сделаете, вы можете получить конфликты в самом файле базы данных, что может привести к повреждению вашей базы данных файломпотеря.

4. Спасибо, @Erik A, я совершенно не знал об этом, решение Access db для SharePoint было предложено мне ИТ-специалистом в офисе, и я ни на мгновение не усомнился в нем. Хорошей новостью является то, что с января мы перейдем на базу данных SQL. Тем временем я выясню, как предотвратить одновременный доступ нескольких пользователей.