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

问题描述:

我使用VB6和ADOX来检查Access 97表列的属性。 对于文本字段,证明该字段允许零长度是非常重要的。VB6 MS-Access返回错误'AllowZeroLength'值

问题:返回值被反转。 如果该字段允许长度为零,则返回值为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 

在访问此属性为true,在VB6的对象是错误的。

In Access this property is true

编辑: 我刚刚发现,当我打开表的访问在编辑模式下,只是节省,这是在VB6给出的值是正确的。我没有改变任何东西,只是打开编辑和保存。有没有人有这个问题?

+0

这段代码对我来说看起来很好。也许你应该显示你正在使用的实际代码。我想你在那里有一些缺陷。 – MicSim

+0

这是实际的代码和代码工作正常。它返回属性中的值。但财产的价值是错误的。 –

+0

@MicSim Adden a screenshot –

其实我找不到答案,为什么我得到这些错误的值。 要打开并保存每张表格对我们和我们的客户来说都是没有解决方案的。

我刚刚发现一个解决方法,通过使用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没有返回正确的值,请告诉我。