2016-07-22 138 views
5

我使用VB6和ADOX來檢查Access 97表列的屬性。 對於文本字段,證明該字段允許零長度是非常重要的。VB6 MS-Access返回錯誤'AllowZeroLength'值

問題:返回值被反轉。 如果該字段允許長度爲零,則返回值爲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 

在訪問此屬性爲true,在VB6的對象是錯誤的。

In Access this property is true

編輯: 我剛剛發現,當我打開表的訪問在編輯模式下,只是節省,這是在VB6給出的值是正確的。我沒有改變任何東西,只是打開編輯和保存。有沒有人有這個問題?

+0

這段代碼對我來說看起來很好。也許你應該顯示你正在使用的實際代碼。我想你在那裏有一些缺陷。 – MicSim

+0

這是實際的代碼和代碼工作正常。它返回屬性中的值。但財產的價值是錯誤的。 –

+0

@MicSim Adden a screenshot –

回答

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沒有返回正確的值,請告訴我。