MS-Access - 如何查找复合主键和关联字段的名称

时间:2009-08-03 09:21:08

标签: ms-access primary-key

我有一堆Access数据库,每个数据库都有几个表。每个表都有一个复合主键,其中包含该键的不同字段。

对于给定的表,我如何获取主键的名称以及其中使用的字段的名称?即,SQL是做什么的? (我需要使用原始SQL而不是Visual Basic)

BTW我知道我可以在Access GUI中打开表并查看主键,但我需要自动化该过程,以便我可以修改主键。

谢谢! 最大

2 个答案:

答案 0 :(得分:0)

查看ADOX Object Model。特别是关键对象:

  

使用的属性和集合   一个Key对象,你可以:

     
      
  • 使用Name属性标识密钥。

  •   
  • 确定密钥是主密钥,外键还是唯一密钥   输入属性。

  •   
  • 使用Columns集合访问密钥的数据库列。

  •   
  • 使用RelatedTable属性指定相关表的名称。

  •   
  • 确定删除或更新主键时执行的操作   使用DeleteRule和UpdateRule   属性。

  •   

此外,How to list the primary key columns in an Access table

更新:我认为问题原来是以编程方式说的:如果你想使用TSQL,那么你需要查询Hidden System Tables

答案 1 :(得分: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

传入字符串数组,并使用字段名称填充。函数返回的字段数。希望这会有所帮助。

赛斯