2016-07-22 1 views
5

Access 97 테이블 열의 속성을 확인하기 위해 VBOX를 ADOX와 함께 사용하고 있습니다. 텍스트 필드의 경우 길이가 0 인 지 여부를 증명하는 것이 중요합니다.VB6 MS-Access에서 잘못된 'AllowZeroLength'값을 반환합니다.

문제 : 반환 값이 반전됩니다. 필드의 길이가 0 인 경우 필드가 값이 true가 아닌 경우 false가 반환됩니다.

필드가이 속성을 지원하지 않으면 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 : Access에서이 속성이 true

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 

의 VB6 개체에 거짓입니다.

In Access this property is true

편집 : 난 그냥 내가 편집 모드에서 Access에서 테이블을 열고 방금 저장있을 때, VB6에서 주어진 값이 옳다 것을 알아 냈다. 나는 아무것도 바꾸지 않고 편집하고 저장하기 만하면됩니다. 누구든지 이미이 문제가 있었습니까?

+0

이 코드는 나에게 잘 보입니다. 아마 당신이 사용하고있는 실제 코드를 보여 주어야합니다. 네가 거기에 결함이있는 것 같아. – MicSim

+0

이것은 실제 코드이며 코드는 정상적으로 작동합니다. 속성에있는 값을 반환합니다. 그러나 부동산의 가치는 잘못되었습니다. –

+0

@MicSim Adden 스크린 샷 –

답변

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가 올바른 값을 반환하지 않는지 알려주세요.

관련 문제