Запись не может быть считана; никакое разрешение чтения на 'MSysObjects'

Я пытаюсь получить список всех таблиц от базы данных формата ACCDB Доступа 2007 года с помощью Excel VBA.

Я следовал этому сообщению:

Как я могу получить имена таблиц от базы данных Access MS?

Используя:

SELECT MSysObjects.Name AS table_name
FROM MSysObjects
WHERE
        (((Left([Name],1))<>"~")
    AND ((Left([Name],4))<>"MSys")
    AND ((MSysObjects.Type) In (1,4,6)))
order by MSysObjects.Name

но я получаю эту ошибку.

Запись не может быть считана; никакое разрешение чтения на 'MSysObjects'

Я хочу смочь получить имена таблиц только с помощью SQL-оператора а не OpenSchema метод.

Я думаю, что проблема с Доступом. Я не уверен.

У кого-либо есть какая-либо идея?

9
задан Community 9 July 2018 в 19:34
поделиться

3 ответа

Похоже, проблема с разрешениями. Попробуйте открыть базу данных и перейти к разрешениям безопасности (в меню «Инструменты» -> «Безопасность» -> «Разрешения для пользователей и групп»). Убедитесь, что у вас есть доступ администратора к базе данных.

Если вы этого не сделаете, вам, возможно, придется войти в базу данных как пользователь, который делает и предоставляет себе разрешения

1
ответ дан 4 December 2019 в 11:42
поделиться

Мне удалось заставить код работать с файлом MDB. У меня была возможность установить разрешения пользователей с помощью «Инструменты базы данных - Пользователи и разрешения» на ленте. Эта опция доступна только для файлов MDB. Теперь проблема в том, чтобы заставить его работать с файлом ACCDB.

Вот мой код:

Dim DBFile As String  
Dim Connection As ADODB.Connection 
Dim Recordset As New ADODB.Recordset

DBFile = "C:\Documents and Settings\User\Desktop\Son.mdb"

Set Connection = New ADODB.Connection  <br/>
Connection.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= " & DBFile & ";"  

SQLString = "SELECT MSysObjects.Name AS table_name" & _
"FROM MSysObjects WHERE (((Left([Name],1))<>" & """~""" & ")" & _
"AND ((Left([Name], 4))<>" & """MSys""" & ")" & _
"AND ((MSysObjects.Type) In (1,4,6)));order by MSysObjects.Name" 

Set Recordset = New ADODB.Recordset 
Recordset.Open SQLString, Connection

Проблема в том, что я не могу заставить его работать с файлами ACCDB.

0
ответ дан 4 December 2019 в 11:42
поделиться

Используйте коллекцию DAO tabledefs

Sub TableDefs()

    Dim db As dao.Database
    Dim tdfLoop As dao.TableDef

    Set db = CurrentDb
    With db
        Debug.Print .TableDefs.Count & " TableDefs in " & .name
        For Each tdfLoop In .TableDefs
            Debug.Print "    " & tdfLoop.name
        Next tdfLoop
    End With

End Sub
3
ответ дан 4 December 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: