VB6 MS-Access returns 错误 'AllowZeroLength' 值
VB6 MS-Access returns wrong 'AllowZeroLength' value
我将 VB6 与 ADOX 结合使用来检查 Access 97 table 列的属性。
对于文本字段,重要的是要证明该字段是否允许零长度。
问题:returned 值被反转。
如果字段允许零长度,则 return 为 false,如果字段不允许,则值为 true。
如果一个字段不支持这个 属性 它 return 是错误的,这是正确的。
有人可以解释为什么 return 是倒置的吗?
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 中此 属性 为真,在 VB6 对象中为假。
编辑:
我刚刚发现,当我在 Access 中以编辑模式打开 table 并保存时,VB6 中给出的值是正确的。我不做任何更改,只是打开编辑并保存。有没有人已经有这个问题?
实际上我没有找到答案,为什么我得到这些错误的值。
打开和保存每个 table 对我们和我们的客户来说都不是解决方案。
我刚刚找到了一个解决方法,使用 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 没有 returns 正确的值,请告诉我。
我将 VB6 与 ADOX 结合使用来检查 Access 97 table 列的属性。 对于文本字段,重要的是要证明该字段是否允许零长度。
问题:returned 值被反转。 如果字段允许零长度,则 return 为 false,如果字段不允许,则值为 true。
如果一个字段不支持这个 属性 它 return 是错误的,这是正确的。
有人可以解释为什么 return 是倒置的吗?
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 中此 属性 为真,在 VB6 对象中为假。
编辑: 我刚刚发现,当我在 Access 中以编辑模式打开 table 并保存时,VB6 中给出的值是正确的。我不做任何更改,只是打开编辑并保存。有没有人已经有这个问题?
实际上我没有找到答案,为什么我得到这些错误的值。 打开和保存每个 table 对我们和我们的客户来说都不是解决方案。
我刚刚找到了一个解决方法,使用 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 没有 returns 正确的值,请告诉我。