部署数据标准检查工具 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











