Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何从表中检索自动递增字段名?_Ms Access_Vba_Dao - Fatal编程技术网

Ms access 如何从表中检索自动递增字段名?

Ms access 如何从表中检索自动递增字段名?,ms-access,vba,dao,Ms Access,Vba,Dao,我正在编写一个函数,用于获取任何给定表中自动递增字段的名称 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

我正在编写一个函数,用于获取任何给定表中自动递增字段的名称

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
我尝试在线查找,但找不到自动增量的dao字段类型。我注意到有一种称为DbGuid的类型似乎与此有关,但我不知道它是什么。我还看到了其他sql DBMS,它们有一个用于这类事情的函数,但我在MS Access中找不到这样的函数


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

属性字段可以是几个值的组合,这些值可以成为一个总值,请参见:和

我无法让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=16
,而
dbFixedField=1
,因此您可以检查
fld.Attributes
的值为17。根据链接的post,AND执行按位运算,如果在正确的位置有一个,则返回true

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

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

你能解释一下吗?如果fld.attributes用于什么?@rosa有更多的解释。