Nik*_* Bo 5 database vb6 ms-access ado
我正在使用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
Run Code Online (Sandbox Code Playgroud)
函数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
Run Code Online (Sandbox Code Playgroud)
在Access中,此属性为true,在VB6对象中为false.
编辑: 我刚刚发现,当我在Access中以编辑模式打开表并只保存时,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
Run Code Online (Sandbox Code Playgroud)
如果有人得到答案,为什么 ADO 没有返回正确的值,请告诉我。
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |