ms-access - 如何从表中获取自增字段名?

标签 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
    GetID = fld.Name
End Sub

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

这是一个很大的数据库,我不知道自动增量字段的名称可能是什么。所以我无法执行 instr(fieldname, "id") 或类似的操作来找到它。

最佳答案

属性字段可以是几个值的组合,这些值成为一个总值,请参阅: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 执行按位 And,如果正确位置有一个 1,则返回 true。

自动 ID 字段的 fld.Attributes 结果为:名称:AutoID 属性:17 二进制:0000000000010001 因此, 的位置有一个 1 >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

关于ms-access - 如何从表中获取自增字段名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35202162/

相关文章:

vba - Excel VBA 错误 438 "Object doesn' t 支持此属性或方法”

vba - 循环工作簿时无法获得正确的工作表名称

json - Swift 3 - 将模拟的 JSON 声明为来自服务器的响应

java - 不确定我是否理解 TransactionAwarePersistenceManagerFactoryProxy

sql - 在 MS Access 和 SQL Server 中处理图片

ms-access - 使用“查找”对话框的 MS Access “Update or CancelUpdate” 错误

ms-access - ms-access 中的日期格式

database - MS Access 数据 Access 限制

arrays - Excel VBA函数: How to pass range,转换为数组,反转,返回数组

java - 当 SQL 子句需要 "disappear"来表示退化情况时,有没有办法使用 @Bind 而不是 @Define?