我正在编写一个函数,它在任何给定的表中获取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”)或类似的东西来找到它。
答案 0 :(得分:3)
属性字段可以是几个值的组合,这些值会成为一个总值,请参阅:MSDN和MSDN 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=16
和dbFixedField=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