如何从 table 中检索自动递增字段名称?
How to retrieve the auto increment field name from a table?
我正在编写一个函数来获取任何给定 table
中 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") 或类似的东西来找到它。
属性字段可以是几个值的组合,成为一个总值参见:MSDN and 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 字段将为 dbAutoIncrField=16
和 dbFixedField=1
,因此您可以检查 fld.Attributes
的值为 17。AND 根据到链接 post 执行按位,如果在正确的位置有一个,则返回 true。
您的自动 ID 字段 fld.Attributes
的结果是:Name: AutoID Attributes: 17 Binary: 0000000000010001
所以您在 dbAutoIncrField
的位置有一个 1,在 [=18 的位置有一个 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
我正在编写一个函数来获取任何给定 table
中 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") 或类似的东西来找到它。
属性字段可以是几个值的组合,成为一个总值参见:MSDN and 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 字段将为 dbAutoIncrField=16
和 dbFixedField=1
,因此您可以检查 fld.Attributes
的值为 17。AND 根据到链接 post 执行按位,如果在正确的位置有一个,则返回 true。
您的自动 ID 字段 fld.Attributes
的结果是:Name: AutoID Attributes: 17 Binary: 0000000000010001
所以您在 dbAutoIncrField
的位置有一个 1,在 [=18 的位置有一个 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