如何从表中检索自动增量字段名称?

时间:2016-02-04 13:22:15

标签: vba ms-access access-vba dao

我正在编写一个函数,它在任何给定的表中获取AutoIncrement字段的名称

public sub GetID(ByVal tblName As String) As String
    Dim rs as RecordSet
    Dim fld as field

    For each fld in rs.Fields
        if fld.type = 'autoIncrement?'
            Exit for
        End If
    Next fld
    GetID = fld.Name
End Sub

我尝试在网上查找,但我找不到AutoIncrement的dao字段类型。我注意到有一种名为DbGuid的类型似乎与此有关,但我无法弄清楚它是什么。我还看到其他sql DBMS具有此类功能,但我在MS Access中找不到这样的功能。

这是一个大数据库,我不知道AutoIncrement字段的名称是什么。所以我不能做一个instr(fieldname,“id”)或类似的东西来找到它。

1 个答案:

答案 0 :(得分:3)

属性字段可以是几个值的组合,这些值会成为一个总值,请参阅:MSDNMSDN Forum

我无法让dbUpdateableField打印出任何字段的值,但显然它是32。

Attribute: dbAutoIncrField    Long: 16      Binary: 0000000000010000
Attribute: dbDescending       Long: 1       Binary: 0000000000000001
Attribute: dbFixedField       Long: 1       Binary: 0000000000000001
Attribute: dbHyperlinkField   Long: 32768   Binary: 1000000000000000
Attribute: dbSystemField      Long: 8192    Binary: 0010000000000000
Attribute: dbUpdateableField  Long: 0       Binary: 
Attribute: dbVariableField    Long: 2       Binary: 0000000000000010

因为该字段总计为标准autoNum字段为17 dbAutoIncrField=16dbFixedField=1所以您可以检查fld.Attributes的值为17. AND根据链接的帖子执行按位并返回true,如果有一个位于正确的位置。

自动ID字段fld.Attributes的结果为:Name: AutoID Attributes: 17 Binary: 0000000000010001因此dbAutoIncrField位置为1,dbFixedField位置为1

Private Function AutoNumberField(tableName As String) As String
     Dim dbs As DAO.Database
     Dim tdf As DAO.TableDef
     Dim fld As DAO.Field

     Set dbs = CurrentDb
     Set tdf = dbs.TableDefs(tableName)
     For Each fld In tdf.fields
         If fld.Attributes And dbAutoIncrField Then
             AutoNumberField = fld.name
             Exit Function
         End If
     Next fld
End Function