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
VB-에러처리에 관련된 팁  (0) 2008.06.26
WScript 예제  (0) 2008.06.26
VB-SystemMonitor 사용하기  (0) 2008.06.26
Window2000에서의 MSMQ 사용  (0) 2008.06.26


Posted by 🐮Thermidor™ 떼르미

댓글을 달아 주세요



자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]