Check for valid values of fields
Public Sub CheckValidValue(Optional TableName As String = "BUG")

' Check for valid values of fields

    Dim BugFact As BugFactory
    Dim bugList As List
    Dim aField   As TDField
    Dim fieldList As List
    Dim rc, ErrCode As Long
    Dim aBug As Bug
    Dim msg$
    Dim okCnt%, noNodeCnt%, errorCnt%, unknownCnt%
    Dim dataType As Long

'------------------------------------------------
' User BugFactory.Fields to get a list of TDField
' objects in the bug table.
' This example uses the BugFactory, but this can
' be done with any class that implements IBaseFactory
    'tdc is the global TDConnection object.
    Set BugFact = tdc.BugFactory
    Set fieldList = BugFact.Fields

'----------------------------------------------
' Use List.Count to check the number of items.
    Debug.Print: Debug.Print
    Debug.Print "There are " & fieldList.Count & _
        " fields in this table."
    Debug.Print "----------------------------------"
'Get any bug. To look at field attributes we
' need a valid object. Since this example is
' not interested in the particular values of the object,
' it doesn't matter which bug.
    Set bugList = BugFact.NewList("")
    Set aBug = bugList(0)
    
' Walk through the list.
    For Each aField In fieldList
        
        With aField
        ' Quit when we have enough for this example.
        If InStr(aField.name, "BG_USER_10") > 0 Then Exit For
        
        ' For the DataTypeString() code,
        '  see example "Convert data types to string"
        Debug.Print .name & ", " & .Property & ", Data type is " _
            & DataTypeString(.Type)
        On Error Resume Next
'----------------------------------------------------
'Use TDField.IsValidValue to confirm that a value can
'be used for a field.
' Get the correct data type and check validity of an
'  arbitrary value.
' Save the error code immediately after IsValidValue call
'  before another call can change the err object.
        dataType = aField.Type
        Select Case dataType
            Case TDOLE_LONG, TDOLE_ULONG
                aField.IsValidValue 5, aBug
                ErrCode = err.Number
            Case TDOLE_FLOAT
                aField.IsValidValue 5.5, aBug
                ErrCode = err.Number
            Case TDOLE_STRING
                aField.IsValidValue "Joe", aBug
                ErrCode = err.Number
            Case Else
            'These will be errors:
                aField.IsValidValue _
                    "String to non-string value", aBug
                ErrCode = err.Number

        End Select
        
' Output an error code message.
        If ErrCode = 0 Then 'S_OK
            msg = "Valid Value"
            okCnt = okCnt + 1
        Else
             rc = ErrCode - vbObjectError
             Select Case rc
                Case FIELD_E_VERIFIED
                    msg = "Error: Invalid value for field"
                    errorCnt = errorCnt + 1
                Case TDOLE_NONODE
                    msg = "Error: Field can not be set to this value"
                    noNodeCnt = noNodeCnt + 1
                Case Else
                    msg = "Unrecognized error: " & rc _
                        & " , HRESULT = " & ErrCode
                    unknownCnt = unknownCnt + 1
            End Select
        End If
        Debug.Print vbTab & msg
        '
        End With 'aField
    Next aField
    Debug.Print "----------------------------------"
    Debug.Print "Number of fields with valid value  = " & okCnt
    Debug.Print "Number of fields with invalid type  = " & errorCnt
    Debug.Print "Number of fields with invalid value= " & noNodeCnt
    Debug.Print "Number of fields with unknown error = " & unknownCnt
    Debug.Print "----------------------------------"
End Sub