部署数据标准检查工具 v1.34_20221215
在 MS-SQL Server 中使用 VARCHAR(MAX) 运行标准检查时,出现“类型不匹配”错误。分发解决该错误的数据标准检查工具v1.34_20221215。
数据标准检查工具_2.1.画面构成,2.2.标准检查功能-Productivity Skill (prodskill.com)
以下评论已发布到此帖子:
一、现象
在 Data Standard-Check Tool v1.33 中尝试对 VARCHAR(MAX) 格式的属性进行标准检查时,
如“发生运行时错误‘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
三、措施
如下,将长度值改为根据数据格式赋值给其他变量,使用字符类型变量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 length的数据长度的代码如下。第 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
检查结果无误显示如下。
4. 下载数据标准检查工具v1.34_20221215
补丁版本已经上传到github,可以从下面的网址下载。
https://github.com/DAToolset/ToolsForDataStandard/raw/main/속성%20표준점검%20도구_v1.34_20221215_1.xlsm