2009-08-03 46 views
1

我有一大堆的Access数据库,每个有几个表。每个表都有一个复合主键,其中包含该键的不同字段。MS-访问 - 如何找到复合主键的名称和相关领域

我如何,对于一个给定的表,获得主键,这是在它使用的字段的名称叫什么名字?也就是说,要做什么SQL呢? (我需要使用原始SQL而不是Visual Basic)

顺便说一句我知道我可以在Access GUI中打开表格并在那里看到主键,但是我需要自动化该过程以便我可以修改主键。

谢谢! 最大

+0

为什么限制SQL?你使用哪种语言访问数据? – 2009-08-03 20:07:35

回答

0

看一看的ADOX Object Model。具体的重点对象:

随着 的属性和集合Key对象,你可以:

  • 识别与name属性的关键。

  • 确定键是主要的,外国的,或者唯一与 Type属性。

  • 访问与列集合关键的数据库列。

  • 与RelatedTable属性指定有关表的名称。

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

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

更新:我认为这个问题最初编程说:如果你想使用TSQL,那么你需要查询Hidden System Tables

+0

感谢米奇 - 你介意给我一些关于sql的指针吗?我从来没有听说过adox模型,也不知道如何得到它... – 2009-08-03 09:39:20

+0

索引没有列在MSysObjects中,也没有列出我知道的任何其他系统表。 – 2009-08-03 20:05:42

0

下面是访问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