我正在使用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。
修改 我刚刚发现,当我在Access中以编辑模式打开表并且只是保存时,VB6中给出的值是正确的。我没有改变任何东西,只是打开编辑并保存。有人有这个问题吗?
答案 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没有返回正确的值,请告诉我。