이 문서는 VBScript(Visual Basic Scripting Edition)를 사용하여 adNumeric
(131) 필드 유형에 대한 숫자 비교 또는 계산을 수행할 때 발생하는 오류(유형 불일치)를 해결하는 데 도움이 됩니다.
원래 제품 버전: Visual Basic 스크립트
원래 KB 번호: 306916
증상
VBScript를 사용하여 adNumeric
(131) 필드 유형에 대해 숫자 비교 또는 계산을 수행할 때 다음과 같은 오류 메시지가 나타날 수 있습니다.
오류 메시지 1
Microsoft VBScript 런타임 오류 '800a000d'
형식 불일치오류 메시지 2
Microsoft VBScript 런타임 오류 '800a01ca'
변수가 VBScript에서 지원하지 않는 자동화 유형을 사용합니다.
원인
이러한 오류 메시지는 VBScript가 adNumeric
값을 유효한 숫자 유형으로 올바르게 변환할 수 없기 때문에 발생합니다. 이 동작은 의도된 것입니다.
해결
다음 두 가지 해결 방법 중 하나를 사용할 수 있습니다.
CDbl
또는CInt
함수를 사용하여adNumeric
필드를 변환합니다.- 이 동작이 나타나지 않는 JScript를 사용합니다.
ASP(Active Server Pages) 페이지나 간단한 Visual Basic Script(.vbs) 파일을 통해 이 동작을 재현할 수 있습니다. 다음 내용에서는 간단한 .vbs 파일에서 문제를 재현하는 방법을 단계별로 설명합니다.
동작을 재현하는 1단계: Oracle 테이블 만들기
Oracle 서버에서 다음 스크립트를 실행하여 샘플 테이블을 만듭니다.
DROP TABLE Cust;
CREATE TABLE Cust (CustID NUMBER(22,6) PRIMARY KEY, Name VARCHAR2(50));
INSERT INTO Cust VALUES(222,'Kent');
INSERT INTO Cust VALUES(333,'Sally');
COMMIT;
동작을 재현하는 2단계: VBS 파일 만들기
메모장에서 Test.vbs라는 이름으로 새 텍스트 문서를 만든 뒤 다음 코드를 테스트에 붙여넣습니다.
Set oConn = CreateObject("ADODB.Connection") oConn.open "Provider=MSDAORA;user id=User;" & _ "password=password;data source=Oracle816Server;" set oRS = oConn.Execute("Select CustID FROM Cust") MsgBox "Numeric field type is 131." & vbcrlf & _ "Field Type = " & ors.fields("CustID").type MsgBox "Numeric field * 100 = " & oRS("CustID") * 100 MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
코드가 Oracle 서버를 가리키고 유효한 사용자 이름과 암호를 제공하도록 연결 문자열을 수정합니다.
데스크톱에 Test.vbs를 저장합니다. 확장자를 변경하면 파일이 불안정해질 수 있다는 경고가 나타납니다. 계속하려면 확인 을 클릭합니다. 이 경고가 표시되지 않는 경우 알려진 파일 형식의 확장자를 표시하고 있는지 확인하면 좋습니다.
Test.vbs를 닫습니다.
바탕 화면에서 Test.vbs를 두 번 클릭하여 코드를 실행합니다. 유형 불일치 오류 메시지가 나타납니다.
다음 코드 줄의 주석 처리를 제거하여
adNumeric
필드를 이중 데이터 유형으로 변환합니다.MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
다음 코드 줄을 주석 처리합니다.
MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
Test.vbs를 닫고 저장합니다.
바탕 화면에서 Test.vbs를 두 번 클릭하여 코드를 다시 실행하면 메시지 상자 두 개가 표시되고 오류 메시지는 표시되지 않습니다.