2009-08-03 2 views
1

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

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

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

спасибо! max

+0

Почему ограничение SQL? На каком языке вы получаете доступ к данным? –

ответ

0

Посмотрите на ADOX Object Model. В частности, ключевой объект:

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

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

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

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

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

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

Также How to list the primary key columns in an Access table

Обновление: Я думаю, что вопрос изначально программно сказал: Если вы хотите использовать TSQL, то вам необходимо запросить Hidden System Tables

+0

спасибо mitch - не могли бы вы дать мне несколько указателей на sql для этого? Я никогда не слышал о модели adox и понятия не имею, как это получить ... –

+0

Индексы не перечислены в MSysObjects или любой другой системной таблице, о которой я знаю. –

+0

Как вы используете ADOX в SQL, о чем просит первоначальный вопросник? –

0

Вот функция 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 

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

Seth

+0

Я понимаю, что это не способ sql сделать это ... но это способ, который будет работать. Перед использованием этого кода вам необходимо установить ссылку на ADOX для вашего проекта. Для этого ... из окна кода «Инструменты/ссылки».Прокрутите вниз, пока не увидите «Microsoft ADO Ext. 6.0 для DDL и безопасности». Установите флажок рядом с ним. Тогда вышеприведенный код должен работать. Если вы не видите эту ссылку, вам может потребоваться установить ее из одного из MDAC. Сет –

 Смежные вопросы

  • Нет связанных вопросов^_^