[英]VB6 MS-Access returns wrong 'AllowZeroLength' value
我正在使用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中給出的值是正確的。 我沒有改變任何東西,只是打開編輯並保存。 有人有這個問題嗎?
其實我沒有找到答案,為什么我得到這些錯誤的價值觀。 打開並保存每張桌子對我們和我們的客戶來說都無法解決。
我剛剛找到了一個解決方法,通過使用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沒有返回正確的值,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.