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

时间:2016-07-22 08:41:48

标签: database ms-access vb6 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

函数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

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

In Access this property is true

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

1 个答案:

答案 0 :(得分: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

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