MS-Access - как найти имя составного первичного ключа и связанные поля - PullRequest
1 голос
/ 03 августа 2009

У меня есть куча баз данных Access, каждая из которых имеет несколько таблиц. Каждая таблица имеет составной первичный ключ с различными полями, включающими этот ключ.

Как я могу, для данной таблицы, получить имя первичного ключа и имена полей, которые в нем используются? Т.е. что такое SQL для этого? (Мне нужно использовать сырой SQL, а не Visual Basic)

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

спасибо! макс

Ответы [ 2 ]

0 голосов
/ 03 августа 2009

Вот функция Access VBA, которая использует ADOX для получения столбцов первичного ключа.

Private Function getPrimaryKeyFields(ByRef strFieldNames() As String) As Integer
On Error GoTo HandleErr

Dim intReturn As Integer

'just get the primary key field here.
Dim idx As ADOX.Index
Dim Table As ADOX.Table
Dim col As ADOX.Column
Dim cat As New ADOX.Catalog

Set cat.ActiveConnection = CurrentProject.Connection

Set Table = cat.Tables(mTableName)
Set idx = Table.Indexes("PrimaryKey")

ReDim strFieldNames(idx.Columns.Count)
Dim intCount As Integer
intCount = 0
For Each col In idx.Columns
    strFieldNames(intCount) = col.Name
    intCount = intCount + 1
Next
intReturn = intCount
Set idx = Nothing
Set Table = Nothing
Set col = Nothing
Set cat = Nothing



ExitHere:
getPrimaryKeyFields = intReturn
    Exit Function

HandleErr:
    Select Case Err.Number
        Case Else

            'put some error handling here.  
            Resume ExitHere
    End Select
' End Error handling block.
End Function

Передайте строковый массив, и он будет заполнен именами полей. Количество полей возвращается функцией. Надеюсь, это поможет.

Сет

0 голосов
/ 03 августа 2009

Взгляните на ADOX Object Model . В частности, Ключевой объект:

со свойствами и коллекциями Ключевой объект вы можете:

  • Определите ключ с помощью свойства Name.

  • Определите, является ли ключ первичным, внешним или уникальным с Тип недвижимости.

  • Доступ к столбцам базы данных ключа из коллекции Columns.

  • Укажите имя связанной таблицы со свойством RelatedTable.

  • Определение действия, выполняемого при удалении или обновлении первичного ключа. с помощью DeleteRule и UpdateRule свойства.

Также Как вывести список столбцов первичного ключа в таблице доступа

Обновление: я думаю, что изначально вопрос задавался программно: если вы хотите использовать TSQL, то вам нужно запросить Скрытые системные таблицы

...