On Error Resume Next
UserNam = Trim(UserNam)
If Len(UserNam) > 0 Then
If UserNam <> Trim(oCois.Get("displayName")) Then
oCois.Put "displayName", UserNam ' 실사용자 이름 삽입
blnCoisChange = True
End If
Else
tempVal = Trim(oCois.Get("displayName"))
If Err.Number <> &H8000500D Then
oCois.PutEx ADS_PROPERTY_CLEAR, "displayName", vbNullString
blnCoisChange = True
End If
Err.Clear
End If
CustNam = Trim(CustNam)
If Len(CustNam) > 0 Then
If CustNam <> Trim(oCois.Get("custName")) Then
oCois.Put "custName", CustNam ' 명의자 이름 삽입
blnCoisChange = True
End If
Else
tempVal = Trim(oCois.Get("custName"))
If Err.Number <> &H8000500D Then
oCois.PutEx ADS_PROPERTY_CLEAR, "custName", vbNullString
blnCoisChange = True
End If
Err.Clear
End If
이와 같은 코드가 계속해서 반복실행되는 경우, 비정상적인 실행이 될 수 있다.
예를 들어, 위의 경우 첫번째 Get명령에서, 즉,
If UserNam <> Trim(oCois.Get("displayName")) Then
에서 에러가 발생하는 경우에는 Err.Number = &H8000500D가 된다.
이 경우 에러의 발생과 관계없이 UserNam 비교루틴에서 원하는 결과를 얻을 수 있지만
여기서 발생한 에러는 다음의 비교루틴까지 전달되어 문제를 일으킬 수 있게 된다.
두번째 비교루틴에서
tempVal = Trim(oCois.Get("custName"))
If Err.Number <> &H8000500D Then
이와같은 에러코드를 비교하는 문장은 바로 위 문장에서 에러가 발생하는 경우에는 정상적으로 체크되어 원하는 결과를 얻을 수 있지만, 이전의 비교루틴에서 에러가 발생된 후, 이 문장에서 에러가 발생하지 않는 경우에는 Err.Number = &H8000500D값을 여전히 가지고 있게되어 비정상적인 동작을 유발한다.
다음은 이런 오류를 해결할 수 있는 코드이다.
On Error Resume Next
UserNam = Trim(UserNam)
If Len(UserNam) > 0 Then
If UserNam <> Trim(oCois.Get("displayName")) Then
oCois.Put "displayName", UserNam ' 실사용자 이름 삽입
blnCoisChange = True
End If
Else
Err.Clear
tempVal = Trim(oCois.Get("displayName"))
If Err.Number <> &H8000500D Then
oCois.PutEx ADS_PROPERTY_CLEAR, "displayName", vbNullString
blnCoisChange = True
End If
Err.Clear
End If
strErrStep = "M_7"
CustNam = Trim(CustNam)
If Len(CustNam) > 0 Then
If CustNam <> Trim(oCois.Get("custName")) Then
oCois.Put "custName", CustNam ' 명의자 이름 삽입
blnCoisChange = True
End If
Else
Err.Clear
tempVal = Trim(oCois.Get("custName"))
If Err.Number <> &H8000500D Then
oCois.PutEx ADS_PROPERTY_CLEAR, "custName", vbNullString
blnCoisChange = True
End If
Err.Clear
End If
다른 점은 Err.Clear를 한 줄 추가해준 것 뿐이다.
결론 : 에러코드를 비교하고자 하는 경우에는, 비교하기 직전의 문장 앞에서 에러를 항상 초기화해 주어야 한다. 그리고, 비교/처리가 끝난 후에도 역시 에러를 초기화해 준다.
'Tech: > ASP·VB6' 카테고리의 다른 글
성능 및 스타일 향상에 도움이 되는 28가지 ASP 팁 1~5 (0) | 2008.06.26 |
---|---|
VB-RDS (Remote Data Service) 사용 (0) | 2008.06.26 |
WScript 예제 (0) | 2008.06.26 |
VB-SystemMonitor 사용하기 (0) | 2008.06.26 |
Window2000에서의 MSMQ 사용 (0) | 2008.06.26 |