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

<<Inhaltsverzeichnis>>

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.

()
((1, 0)) =
(()).(, 8).
() ()
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
.
...
'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.

()
((1, 0)) =
(()).(, 8).
() ()
(1)
(2)
(3)
(4)
(5)
((6)) =
((6))
(6)
(7)
(8)
.
...
'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