Stellen Sie das Data Standards Check Tool v1.34_20221215 bereit

Wenn ich eine Standardprüfung mit VARCHAR(MAX) in MS-SQL Server ausführe, erhalte ich die Fehlermeldung „Typkonflikt“. Verteilen Sie das Datenstandard-Inspektionstool v1.34_20221215, das diesen Fehler behoben hat.

Datenstandard-Inspektionstool_2.1. Bildschirmaufbau, 2.2. Standardinspektionsfunktion – Produktivitätsfähigkeit (prodskill.com)

Die folgenden Kommentare wurden zu diesem Beitrag gepostet:

데이터 표준점검 도구 버그 내용 댓글
Kommentare zum Fehlerinhalt des Data Standards Check Tool

1. Phänomen

Beim Versuch, Attribute des VARCHAR(MAX)-Formats im Data Standard-Check Tool v1.33 standardmäßig zu prüfen,

데이터 표준점검 도구 v1.33에서 VARCHAR(MAX) 형식의 속성 표준 점검 시도
Versuch einer Attributstandardprüfung des VARCHAR(MAX)-Formats im Data Standard Checking Tool v1.33

Wie in „Ein Laufzeitfehler ‚13‘ ist aufgetreten: Typkonflikt.“ Es ist ein Fehler aufgetreten.

"'13' 런타임 오류가 발생하였습니다.: 형식이 일치하지 않습니다." 오류 발생
„Ein Laufzeitfehler ‚13‘ ist aufgetreten: Typkonflikt.“ Ein Fehler ist aufgetreten

2. Ursache

Unter der Annahme, dass die im Datentyp der Eigenschaft angegebene Länge ein Ganzzahltyp ist (z. B. 10, 100 usw.), wird einer Ganzzahlvariablen im VBA-Code ein Wert zugewiesen. „MAX“ ist ein Fehler, der auftritt, weil dies der Fall ist ist kein ganzzahliger Typ.

Unten finden Sie die Ladeprozedurquelle der CStdDomainDic-Klasse. Der Fehler tritt in Zeile 19 des Codes auf.

'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. Maßnahmen

Wie folgt wurde der Längenwert geändert, um entsprechend dem Datenformat anderen Variablen zugewiesen zu werden, und die Länge von m_s, einer Variablen vom Typ Zeichen, wurde zum Vergleich der Datenlänge verwendet.

'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

Der zum Vergleichen der Datenlänge der m_s-Länge, einer Zeichentypvariablen, verwendete Code lautet wie folgt. Die Zeilen 13 bis 18 sind die hinzugefügten Codes.

'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

Das Prüfergebnis wird wie folgt fehlerfrei angezeigt.

데이터 표준점검 도구 v1.34에서 VARCHAR(MAX) 형식의 속성 표준 점검 결과
Ergebnis der Attributstandardprüfung im VARCHAR(MAX)-Format im Data Standard Check Tool v1.34

4. Laden Sie das Data Standard Check Tool v1.34_20221215 herunter

Die Patch-Version wurde auf Github hochgeladen und kann von der untenstehenden URL heruntergeladen werden.

https://github.com/DAToolset/ToolsForDataStandard/raw/main/속성%20표준점검%20도구_v1.34_20221215_1.xlsm

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch