データ標準チェックツールv1.34_20221215展開

MS-SQL ServerのVARCHAR(MAX)を使用して標準チェックを実行すると、「形式が一致しません」というエラーが発生します。このエラーを解決したデータ標準チェックツールv1.34_20221215を展開します。

データ標準チェックツール_2.1.画面構成、2.2.標準チェック機能 - 生産性Skill(prodskill.com)

この記事には次のようなコメントがありました。

데이터 표준점검 도구 버그 내용 댓글
データ標準チェックツールのバグ内容コメント

1.現象

データ標準チェックツールv1.33でVARCHAR(MAX)形式のプロパティ標準チェックを試みると、

데이터 표준점검 도구 v1.33에서 VARCHAR(MAX) 형식의 속성 표준 점검 시도
データ標準チェックツールv1.33でVARCHAR(MAX)形式のプロパティ標準チェックを試みる

次のように、「 '13'ランタイムエラーが発生しました。フォーマットが一致しません。」エラーが発生します。

"'13' 런타임 오류가 발생하였습니다.: 형식이 일치하지 않습니다." 오류 발생
「'13'ランタイムエラーが発生しました。フォーマットが一致しません。」エラー発生

2.原因

属性のData Typeに指定された長さは、整数型(たとえば10、100など)と仮定してVBAコード上の整数型変数に値を割り当てます。「MAX」は整数型ではないために発生するエラーです。

以下のCStdDomainDicクラスのLoadプロシージャソースです。エラーは19行のコードで発生します。

'CStdDomainDic
Public Sub Load(aBaseRange As Range)
    Dim oStdDomain As CStdDomain
    Dim lRow As Long

    '목록에 아무 값이 없는 경우 exit
    If Trim(aBaseRange.Offset(1, 0)) = "" Then Exit Sub

    Dim vRngArr As Variant
    vRngArr = Range(aBaseRange, aBaseRange.End(xlDown)).Resize(, 8).Value2 '읽는 범위: 8개 컬럼

    For lRow = LBound(vRngArr) To UBound(vRngArr)
        Set oStdDomain = New CStdDomain
        With oStdDomain
            .m_s도메인분류명 = vRngArr(lRow, 1)
            .m_s도메인논리명 = vRngArr(lRow, 2)
            .m_s도메인물리명 = vRngArr(lRow, 3)
            .m_s도메인설명 = vRngArr(lRow, 4)
            .m_s데이터타입명 = vRngArr(lRow, 5)
            .m_i길이 = vRngArr(lRow, 6)  '<-- 여기에서 오류 발생
            .m_i정도 = vRngArr(lRow, 7)
            .m_s데이터타입길이명 = vRngArr(lRow, 8)
            '.m_s데이터타입길이명 = GetDataTypeStr(.m_s데이터타입명, .m_i길이, .m_i정도)
        End With

        Me.Add oStdDomain
    Next lRow
...
End Sub

3. アクション内容

次のようにデータ型に応じて異なる変数に長さ値を割り当てるように変更し、文字型変数であるm_s長さをデータ長を比較するときに使用した。

'CStdDomainDic
Public Sub Load(aBaseRange As Range)
    Dim oStdDomain As CStdDomain
    Dim lRow As Long

    '목록에 아무 값이 없는 경우 exit
    If Trim(aBaseRange.Offset(1, 0)) = "" Then Exit Sub

    Dim vRngArr As Variant
    vRngArr = Range(aBaseRange, aBaseRange.End(xlDown)).Resize(, 8).Value2 '읽는 범위: 8개 컬럼

    For lRow = LBound(vRngArr) To UBound(vRngArr)
        Set oStdDomain = New CStdDomain
        With oStdDomain
            .m_s도메인분류명 = vRngArr(lRow, 1)
            .m_s도메인논리명 = vRngArr(lRow, 2)
            .m_s도메인물리명 = vRngArr(lRow, 3)
            .m_s도메인설명 = vRngArr(lRow, 4)
            .m_s데이터타입명 = vRngArr(lRow, 5)
            If TypeName(vRngArr(lRow, 6)) = "String" Then '<-- 데이터 형식에 따라서 다른 변수에 길이 값 할당
                .m_s길이 = CStr(vRngArr(lRow, 6))
            Else
                .m_i길이 = vRngArr(lRow, 6)
            End If
            .m_i정도 = vRngArr(lRow, 7)
            .m_s데이터타입길이명 = vRngArr(lRow, 8)
            '.m_s데이터타입길이명 = GetDataTypeStr(.m_s데이터타입명, .m_i길이, .m_i정도)
        End With

        Me.Add oStdDomain
    Next lRow
...
End Sub

文字型変数m_s長をデータ長を比較するときに使用したコードは次のとおりです。 13行~18行までが追加したコードだ。

'CStdDomainDic
'두 Domain의 TypeSize 비교결과 return
'aDomainAtt: 비교기준 Domain (속성지정 Type/Size)
'aDomainTgt: 비교대상 Domain (용어 또는 속성분류어 Type/Size)
Public Function GetCompareResult(aCompareType As String, _
            aDomainAtt As CStdDomain, aDomainTgt As CStdDomain) As String
    Dim sResult As String
    sResult = aCompareType + " Type/Size 비교 결과"
    If aDomainAtt.m_s데이터타입명 <> aDomainTgt.m_s데이터타입명 Then
        sResult = sResult + vbLf + "타입 불일치"
    End If
    
    If aDomainAtt.IsStringLength Or aDomainTgt.IsStringLength Then
        If UCase(aDomainAtt.m_s길이) <> UCase(aDomainTgt.m_s길이) Then
            sResult = sResult + vbLf + "길이 불일치"
        Else
            sResult = aCompareType + " Type/Size 일치"
        End If
    ElseIf aDomainAtt.m_i길이 <> aDomainTgt.m_i길이 Then
        sResult = sResult + vbLf + "길이 불일치"
        If aDomainAtt.m_i길이 > aDomainTgt.m_i길이 Then '속성의 Size가 더 큰 경우(도메인 추가 또는 속성 size 조정)
            sResult = sResult + "(감소! 도메인 추가 또는 속성 Size 조정 필요)"
        ElseIf aDomainAtt.m_i길이 < aDomainTgt.m_i길이 Then '비교 대상 Domain Size가 더 큰 경우(대부분은 문제없음)
            sResult = sResult + "(증가 확인)"
        End If
    ElseIf aDomainAtt.m_i정도 <> aDomainTgt.m_i정도 Then
        sResult = sResult + vbLf + "소수점 길이 불일치"
        If aDomainAtt.m_i정도 > aDomainTgt.m_i정도 Then '속성의 Size가 더 큰 경우(도메인 추가 또는 속성 size 조정)
            sResult = sResult + "(감소! 도메인 추가 또는 속성 Size 조정 필요)"
        ElseIf aDomainAtt.m_i정도 < aDomainTgt.m_i정도 Then '비교 대상 Domain Size가 더 큰 경우(대부분은 문제없음)
            sResult = sResult + "(증가 확인)"
        End If
    Else
        sResult = aCompareType + " Type/Size 일치"
    End If
    GetCompareResult = sResult
End Function

次のようにエラーなしでチェック結果を表示します。

데이터 표준점검 도구 v1.34에서 VARCHAR(MAX) 형식의 속성 표준 점검 결과
データ標準チェックツールv1.34でVARCHAR(MAX)形式のプロパティ標準チェック結果

4. データ標準チェックツール v1.34_20221215 ダウンロード

パッチバージョンをgithubにアップロードし、以下のURLからダウンロードできます。

https://github.com/DAToolset/ToolsForDataStandard/raw/main/属性標準チェックツール_v1.34_20221215_1.xlsm

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ja日本語