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的对象是错误的。
编辑: 我刚刚发现,当我打开表的访问在编辑模式下,只是节省,这是在VB6给出的值是正确的。我没有改变任何东西,只是打开编辑和保存。有没有人有这个问题?
答
其实我找不到答案,为什么我得到这些错误的值。 要打开并保存每张表格对我们和我们的客户来说都是没有解决方案的。
我刚刚发现一个解决方法,通过使用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没有返回正确的值,请告诉我。
这段代码对我来说看起来很好。也许你应该显示你正在使用的实际代码。我想你在那里有一些缺陷。 – MicSim
这是实际的代码和代码工作正常。它返回属性中的值。但财产的价值是错误的。 –
@MicSim Adden a screenshot –