【发布时间】:2016-07-22 08:41:47
【问题描述】:
我正在使用带有 ADOX 的 VB6 来检查 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 Object 中为 false。
编辑: 我刚刚发现,当我以编辑模式在 Access 中打开表格并保存时,VB6 中给出的值是正确的。我没有改变任何东西,只是打开编辑和保存。有没有人已经有这个问题?
【问题讨论】:
-
这段代码对我来说很好。也许您应该显示您正在使用的实际代码。我猜你那里有一些缺陷。
-
这是实际代码,代码运行良好。它返回属性中的值。但是属性中的值是错误的。
-
@MicSim 添加截图
-
您说“如果字段不支持此属性,则返回 false”,但您将
True传递给 DefaultValue 参数 - 这就是当“AllowZeroLength”属性不可用时使用的内容定义 -
@dbmitch 谢谢你的回答。我的问题不在于未定义的字段。我知道,例如,布尔字段没有允许零长度属性。我所有的文本字段都设置了这个属性,ADO 返回反转的值。只有当我手动保存表格时,才会返回正确的值。
标签: database ms-access vb6 ado