簡體   English   中英

VB6 MS-Access返回錯誤的'AllowZeroLength'值

[英]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中,此屬性為true

編輯:我剛剛發現,當我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM