Удаление таблицы и внешних ключей для базы данных Microsoft Access с помощью FireDAC (JET)

Мне нужно (программно) удалить таблицу из базы данных Microsoft Access (файл .mdb в формате 2002-2003). Когда я удаляю таблицу, мне нужно удалить все внешние ключи. Внешние ключи были созданы с разными именами, поэтому мне нужен способ перебрать их, чтобы удалить.

FireDAC имеет компонент TFDMetaInfoQuery с MetaInfoKind из mkForeignKeys. Я могу заставить это выполниться, но он никогда не возвращает никаких строк ни для всей базы данных, ни если я укажу .ObjectName. В качестве теста я переключился на mkTables, и данные возвращаются.

Я могу запросить отношения в Access с помощью таблицы MSysRelationships, но когда я пытаюсь сделать запрос непосредственно из FireDAC, я получаю сообщение об ошибке:

Не удалось прочитать определения; нет разрешения на чтение определений для таблицы или запроса «MSYSRELATIONSHIPS»

Есть ли способ:

  1. Удалить таблицу в Microsoft Access и заставить ее одновременно удалять внешние ключи?

  2. Перебирать внешние ключи, указывающие на данную таблицу, чтобы я мог их удалить сам?

Или есть ли другой способ удалить эту таблицу, который я не рассматриваю? Если нужно, я могу получить TADOConnection, но я тоже не видел никакого способа помочь.


person Mark Elder    schedule 09.07.2021    source источник
comment
Рассмотрите этот и другие ответы в соответствии с версией БД - если это работает для таблиц, посмотрите на типы, которые не равны 1, 4 или 6.   -  person AmigoJack    schedule 09.07.2021
comment
Что вы подразумеваете под «удалить внешние ключи» - нужно просто удалить данные поля, а не всю запись? Зачем удалять таблицу? Чем вы собираетесь заменить внешние ключи и как?   -  person June7    schedule 09.07.2021
comment
Вы пытаетесь удалить FK, которые ссылаются на удаляемую таблицу? Или вы пытаетесь удалить FK в сохраняемой таблице, которые ссылаются на другие таблицы?   -  person Remy Lebeau    schedule 09.07.2021
comment
@June7June7 - мне не нужно менять какие-либо данные, только ограничения. В базе данных есть некоторые проблемы с дизайном, и некоторые значения ключей дублируются в нескольких таблицах, текущие ключи изменяются вместе, а не все указывают на одну первичную исходную таблицу.   -  person Mark Elder    schedule 12.07.2021
comment
@RemyLebeau - я пытаюсь удалить FK, которые относятся к удаляемой таблице.   -  person Mark Elder    schedule 12.07.2021
comment
@AmigoJack - MSysObjects, упомянутые в этом ответе, имеют те же проблемы с разрешениями, что и MSysRelationships.   -  person Mark Elder    schedule 12.07.2021
comment
Насколько я помню, кое-что не поддерживается через FireDAC/ODBC, поэтому вам, вероятно, придется использовать Ado и использовать AdoDb.OpenSchema(adSchemaForeignKeys, VarArrayOf([Unassigned, Unassigned, EachTableName]), EmptyParam);   -  person Greg Dawson    schedule 14.07.2021