#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. Тем временем я выясню, как предотвратить одновременный доступ нескольких пользователей.