如何获得ACCESS表的主键名,主键是在表的设计界面中指定的,不是用SQL指定的。求获得ACCESS表的主键名的SQL。

解决方案 »

  1.   

    看这里 http://community.csdn.net/Expert/topic/4625/4625732.xml?temp=.3103449
      

  2.   

    不能用 SQL 得到:DAO:
    Public Function Get_Primary(ByVal databasename As String, ByVal tablename As String) As StringDim td As DAO.TableDef
    Dim db As DAO.database
    Dim nx As DAO.IndexSet db = OpenDatabase(databasename)
    Set td = db.TableDefs(tablename)
    For Each nx In td.Indexes
        If nx.Primary = True Then
            Get_Primary = nx.Fields(0).Name
            Exit For
        End If
    Next
    End Function
    ADOX:
    Public Function Get_Primary(ByVal databasename As String, ByVal tablename As String) As String
    Dim cat As New ADOX.Catalog
    Dim ndx As ADOX.Indexcat.ActiveConnection = "Provider='Microsoft.Jet.OLEDB.4.0';" & _
            "Data Source=" & databasenameFor Each ndx In cat.Tables(tablename).Indexes
        If ndx.PrimaryKey Then
            Get_Primary = ndx.Columns(0).Name
            Exit For
        End If
    Next
    End Function
      

  3.   

    大侠,您的方法返回的是主键的字段名。我要的是主键名(设置主键时Access生成的主键名)不是主键所在的字段名。
      

  4.   

    在Access911上查到答案,分享:须引用“Microsoft ADO Ext. 2.7 For DDL and Security”Public Function GetPrimaryKeyName(strTable As String)
      Dim kyForeign As New ADOX.Key
      Dim cat As New ADOX.Catalog
        
      cat.ActiveConnection = ADOCnn
      GetPrimaryKeyName = ""
      For Each kyForeign In cat.Tables(strTable).Keys
        If kyForeign.Type = adKeyPrimary Then
           GetPrimaryKeyName = kyForeign.Name
           Exit For
           '常量           值      说明
           'adKeyPrimary    1    默认值。此键是主键。
           'adKeyForeign    2    此键是外键。
           'adKeyUnique     3    此键是唯一键。
        End If
      Next
    End Function得到的主键名就是 “primarykey1”之类,已在VB6+Accesss2000上测试通过。结贴。