Получить исходную базу данных MS Access связанных таблиц с Python - PullRequest
0 голосов
/ 28 февраля 2019

После долгих поисков по этой теме, я прошу вашего совета!

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

Я начал с использованием pyodbc но когда я хотел получить доступ к таблице MSysObjects , которая содержит все данные, которые я хотел, но у меня была проблема доступа проблема авторизации (" Невозможно прочитать записи Нетразрешения на чтение для "\ xa0MSysObjects \ xa0 ").

После некоторого поиска я обнаружил несколько строк кода для выполнения в БД Access для авторизации такого запроса. Но его нужно было запускать из каждой БД Accessиз-за какой-то функции, которую можно использовать только в БД Access.

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

Наконец, кажется, чтоесть только несколько решений:

  1. Найдите способ поместить несколько строк, которые дают авторизацию в базу данных (возможно, напрямую импортировать с помощью Python или сделать Python импортирующим его из определенной базы данных Access), а затем выполнить его.
  2. Найдите способ получить необходимую информацию (здесь исходную базу данных связанных таблиц) другим способом, чем MSysObjects.
  3. Найдите способ обновить авторизацию непосредственно из Python с помощьюSQL-запрос.

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

С наилучшими пожеланиями всем вам!

1 Ответ

0 голосов
/ 11 марта 2019

Если у вас все в порядке с решениями, отличными от Python, я думаю, что VBA - лучший инструмент для такой работы.

Private Sub Command1_Click()

Dim db As DAO.Database, tbl As DAO.TableDef
Dim f As DAO.Field
Set db = CurrentDb() ' Connect to current database

' Loop through each table in the database
For Each tbl In db.TableDefs
    Debug.Print "Table name: ", tbl.Name
    ' Loop throuth each field in the table
    For Each f In tbl.Fields
        Debug.Print "Field: ", f.Name
    Next f
Next tbl

End Sub
...