VB6 MS-Access返回错误的'AllowZeroLength'值

Nik*_* Bo 5 database vb6 ms-access ado

我正在使用VB6与ADOX来检查Access 97表列的属性.对于文本字段,重要的是证明该字段允许零长度.

问题:返回的值被反转.如果字段允许零长度,则返回为false,如果该字段不是值为true.

如果某个字段不支持此属性,则返回false,这是正确的.

有人可以解释为什么回报倒置了吗?

Private Sub ReadTableStructure()
    Dim Cat As ADOX.Catalog
    Dim Tbl As ADOX.Table
    Dim Col As ADOX.Column

    Set Cat = New ADOX.Catalog
    Set Cat.ActiveConnection = Conn

    For Each Tbl In Cat.Tables
        For Each Col In Tbl.Columns
            bAllowZeroLength = GetDBPropertyBool(Col.Properties, "Jet OLEDB:Allow Zero Length", True)
        Next Col
    Next Tbl
End Sub
Run Code Online (Sandbox Code Playgroud)

函数GetDBPropertyBool:

Private Function GetDBPropertyBool(Properties As ADOX.Properties, sName As String, bDefaultValue As Boolean) As Boolean
    Dim Prop As ADOX.Property

    Set Prop = Properties(sName)
    If Prop Is Nothing Then
        GetDBPropertyBool = bDefaultValue
    Else
        GetDBPropertyBool = Prop.Value
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

在Access中,此属性为true,在VB6对象中为false.

在Access中,此属性为true

编辑: 我刚刚发现,当我在Access中以编辑模式打开表并只保存时,VB6中给出的值是正确的.我没有改变任何东西,只是打开编辑并保存.有人有这个问题吗?

Nik*_* Bo 2

实际上我没有找到答案,为什么我得到这些错误的值。打开并保存每张桌子对于我们和我们的客户来说并不是解决方案。

我刚刚找到了一个解决方法,即使用 DAO 正确读取属性。

Private Sub ReadTableStructure(DB As DAO.Database)
    Dim i As Integer, j As Integer
    Dim Fld As DAO.Field
    Dim tdfLoop As TableDef

    For i = 0 To DB.TableDefs.Count - 1
        Set tdfLoop = DB(i)   
        For j = 0 To tdfLoop.Fields.Count - 1
            bAllowZeroLength = tdfLoop.Fields(j).AllowZeroLength
        Next j
    Next i
End Sub
Run Code Online (Sandbox Code Playgroud)

如果有人得到答案,为什么 ADO 没有返回正确的值,请告诉我。