我正在编写一个函数,用于获取任何给定表中自动增量字段的名称
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 中找不到这样的功能。
这是一个很大的数据库,我不知道自动增量字段的名称可能是什么。所以我无法执行 instr(fieldname, "id") 或类似的操作来找到它。
属性字段可以是几个值的组合,这些值成为一个总值,请参阅:MSDN和MSDN论坛
我无法让 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
dbAutoIncrField 永远不会是 True。如何正确检查属性中的这个值?