ADO 2.8 버전 차이에 따른 어플리케이션 동작 에러(런타임 에러 430)
-
2011년 12월 5일 월요일 오전 7:06
Windows XP, VB6에서 ActiveX Data Object 2.8 Libary를 참조하여 개발한 프로그램이 Windows Server 2003 SP2 (MDAC 2.8 SP2) 환경에서 동작하지 않고 다음과 같은 에러가 발생합니다.
"Runtime error '430' class does not support Automation or does not support expected interface"
에러의 원인을 추적한 결과 Set Conn = new Connection 에서 발생합니다.
MSDN과 각종 포럼에서 찾아보면 MDAC 버전이 달라서 그런것이라고 하는데, ADO 2.8 파일인 msado15.dll 파일을 배포패키지에 포함해도 설치할 때 에러가 발생합니다. 해결할 방법이 있을까요?Database : Access 2000 MDB
개발환경 : Windows XP 32bit Professional SP3 (MDAC 2.81.3012.0), Visual basic 6.0 SP6, ActiveX Data Objects 2.8 Library 참조
설치환경 : Windows 2003 32bit Standard SP2 (MDAC 2.82.4795.0)소스는 다음과 같습니다.
---------------------------------------------------------------
Dim dbCon As ADODB.ConnectionPrivate Sub Command1_Click()
Dim objRs As New ADODB.Recordset
Dim connStr As String
Set dbCon = New Connection <<< 여기서 에러 발생
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb;Jet OLEDB:Database"
dbCon.Open connStrobjRs.Open "select * from table1", dbCon, 1, 1
List1.Clear
While Not objRs.EOF
List1.AddItem objRs(0)
objRs.MoveNext
Wend
objRs.Close
Set objRs = Nothing
dbCon.Close
Set dbCon = Nothing
End Sub
모든 응답
-
2011년 12월 5일 월요일 오전 8:50중재자
안녕하십니까? Radagast1님
Microsoft MSDN의 Forum 사이트를 방문해 주셔서 감사합니다.
문의 하신 “ADO 2.8 버전 차이에 따른 어플리케이션 동작 에러(런타임 에러 430)”에 대한 답변을 드리겠습니다.
제 생각에는 Registry에 등록이 안되어 있어서 응용 프로그램이 해당 Actuve X 모듈 정보를 찾지 못 합니다.
상기 Function을 실행하시기 전에 msado15.dll 을 Regsvr32로 등록을 하시기 바랍니다(Registry에 등록).혹은, MDAC 2.8 Reditribution을 먼저 설치 후 진행하시기 바랍니다.
Setup Project에서 배포하시려면 아래의 자료를 참조해서 진행하시기 바랍니다.
참고 자료
Deploy ActiveX control by MSI
http://social.msdn.microsoft.com/Forums/zh/winformssetup/thread/8ddd0fd2-e1dc-422c-86cc-366be8cf115b
제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.
제시해 드린 답변이 도움이 되었기를 바랍니다.
-
2011년 12월 5일 월요일 오전 9:26
답변 감사합니다.
제 질문의 설명이 부족했던것 같습니다.
위에 언급한 개발환경(=개발PC)에서는 모든 것이 잘 동작합니다.
하지만 설치환경(=운영서버)에서는 위와 같은 에러가 발생합니다.
오류가 발생하는 운영서버에는 msado15.dll이 이미 존재합니다.(Windows Server 2003 OS를 설치하면 기본으로 설치되는것 같습니다.)
Windows 2003 SP2가 설치된 운영서버에는 2.82.4795(2.8 SP2) 버전의 msado15.dll이 기본적으로 설치되어 있습니다.
Windows XP SP3이 설치된 개발PC에는 2.81.3012(2.8 SP1) 버전의 msado15.dll이 설치되어 있습니다.
제 질문은 지금 발생하는 런타임오류가 MDAC 버전이 다른 이유로 발생하는 것인지 아니면 다른 원인이 있는지, 그리고 그 해결책이 어떤 것이 있는지 하는 것입니다.그리고 개발 환경의 msado15.dll을 운영서버에 복사하여 강제로 Regsvr32로 등록하려고 하면 LoadLibrary 오류가 발생합니다.(오류메시지는 "지정된 프로시저를 찾을 수 없습니다.").
MSDN에 등록된 MDAC 2.8 설치파일은 2.8 SP1버전이 있는데, Windows XP나 Windows 2003에서는 설치되지 않는다고 알고 있습니다.
또한 개발 PC에서 Visual Studio 6.0의 '패키지 및 배포 마법사'를 통해 msado15.dll이 포함된 setup.exe를 만들고 운영서버에서 설치하려고 하면 msado15.dll이 버전 충돌이 나서 설치가 되지 않습니다.답변 부탁드리겠습니다. 감사합니다.
-
2011년 12월 6일 화요일 오전 2:38중재자
안녕하십니까? Radagast1님
Microsoft MSDN의 Forum 사이트를 방문해 주셔서 감사합니다.
위의 이슈 사항을 이해하고 자료를 조사했으나 알맞은 솔루션을 찾지 못 했습니다.
1. 지금 발생하는 런타임오류가 MDAC 버전이 다른 이유로 발생하는 것인지
제 생각에도 버전의 차이 때문에 발생하는 이슈입니다.2. 그 해결책이 어떤 것이 있는지
Windows Server 2003 OS에 개발툴을 설치한 후 다시 컴파일하는 것을 추천해 드립니다.제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.
제시해 드린 답변이 도움이 되었기를 바랍니다.
-
2011년 12월 7일 수요일 오전 4:43
문제를 해결했습니다.
개발용 PC에 설치된 msado15.dll과 Windows Server 2003의 msado15.dll과 호환성에 뭔가 문제가 있는 것 같습니다.
개발용 PC의 msado15.dll의 버전은 2.81.3012이고 세부 빌드 번호는 xpsp_sp3_qfe.101108-1646로 되어있습니다.
이 파일을 같은 2.81.3012 버전에 세부 빌드 번호가 xpsp_sp3_gdr.101108-1643인 파일로 교체를 해서 컴파일하고, Windows Server 2003에서 어플리케이션을 실행하면 전혀 문제가 발생하지 않습니다.문제가 해결이 되긴 했습니다만 이 두 버전이 어떤 차이가 있는건지 알 수 없고, 단순히 msado15.dll 파일만 교체하면 되는건지, 아니면 MDAC 관련파일 전체를 교체해야하는지 모르겠습니다.
그럼 수고하십시요.

