我有一大堆的Access数据库,每个有几个表。每个表都有一个复合主键,其中包含该键的不同字段。MS-访问 - 如何找到复合主键的名称和相关领域
我如何,对于一个给定的表,获得主键,这是在它使用的字段的名称叫什么名字?也就是说,要做什么SQL呢? (我需要使用原始SQL而不是Visual Basic)
顺便说一句我知道我可以在Access GUI中打开表格并在那里看到主键,但是我需要自动化该过程以便我可以修改主键。
谢谢! 最大
我有一大堆的Access数据库,每个有几个表。每个表都有一个复合主键,其中包含该键的不同字段。MS-访问 - 如何找到复合主键的名称和相关领域
我如何,对于一个给定的表,获得主键,这是在它使用的字段的名称叫什么名字?也就是说,要做什么SQL呢? (我需要使用原始SQL而不是Visual Basic)
顺便说一句我知道我可以在Access GUI中打开表格并在那里看到主键,但是我需要自动化该过程以便我可以修改主键。
谢谢! 最大
看一看的ADOX Object Model。具体的重点对象:
随着 的属性和集合Key对象,你可以:
识别与name属性的关键。
确定键是主要的,外国的,或者唯一与 Type属性。
访问与列集合关键的数据库列。
与RelatedTable属性指定有关表的名称。
确定使用DeleteRule和UpdateRule 属性删除或更新主键 时执行的操作。
此外,How to list the primary key columns in an Access table
更新:我认为这个问题最初编程说:如果你想使用TSQL,那么你需要查询Hidden System Tables
感谢米奇 - 你介意给我一些关于sql的指针吗?我从来没有听说过adox模型,也不知道如何得到它... – 2009-08-03 09:39:20
索引没有列在MSysObjects中,也没有列出我知道的任何其他系统表。 – 2009-08-03 20:05:42
下面是访问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
为什么限制SQL?你使用哪种语言访问数据? – 2009-08-03 20:07:35