'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
'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길이를 데이터 길이를 비교할 때 사용하였다.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
'CStdDomainDic
PublicSubLoad(aBaseRange As Range)
Dim oStdDomain As CStdDomain
Dim lRow AsLong
'목록에 아무 값이 없는 경우 exit
IfTrim(aBaseRange.Offset(1, 0)) = ""ThenExitSub
Dim vRngArr AsVariant
vRngArr = Range(aBaseRange, aBaseRange.End(xlDown)).Resize(, 8).Value2'읽는 범위: 8개 컬럼
For lRow = LBound(vRngArr)ToUBound(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)
IfTypeName(vRngArr(lRow, 6)) = "String"Then'<-- 데이터 형식에 따라서 다른 변수에 길이 값 할당
'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
'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행까지가 추가한 코드이다.
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 + "(증가 확인)"
EndIf
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 + "(증가 확인)"
EndIf
Else
sResult = aCompareType + " Type/Size 일치"
EndIf
GetCompareResult = sResult
EndFunction
'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
'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