증상ASP(Active Server Pages)에서 ADO(ActiveX Data Objects)를 사용할 때 다음과 같은 일반적인 오류가 발생할 수 있습니다.
ODBC 드라이버용 Microsoft OLE DB 공급자 오류 '80004005'
[Microsoft][ODBC Microsoft Access 97 드라이버] 작업에서는 업데이트 가능한 쿼리를 사용해야 합니다.
원인 이 문서에서는 이 오류의 네 가지 주요 원인과 해당 해결 방법을 설명합니다. 이 문서에서는 Microsoft Access 데이터베이스에 대해 설명하지만 여기에 제공된 정보는 다른 유형의 데이터베이스에도 적용됩니다.
해결 방법 일반적으로 스크립트가 업데이트를 수행하거나 데이터베이스의 정보를 변경하는 다른 작업을 수행하려고 할 때 이 오류가 발생합니다. 이 오류는 다음 이유 중 하나로 인해 ADO가 데이터베이스에 쓸 수 없기 때문에 발생합니다.
1. 가장 일반적인 이유는 인터넷 게스트 계정(기본적으로 "Everyone" 그룹에 속하는 IUSR_MACHINE)이 데이터베이스 파일에 액세스할 수 없기 때문입니다. (.mdb) 쓰기 권한입니다. 이 문제를 해결하려면 Explorer의 보안 탭을 사용하여 인터넷 게스트 계정이 올바른 사용 권한을 갖도록 이 파일의 속성을 조정하십시오.
참고: ADO와 함께 Microsoft Access 데이터베이스를 사용하는 경우 인터넷 게스트 계정에 .mdb 파일이 포함된 디렉터리에 대한 쓰기 권한도 부여해야 합니다. 이는 Jet가 데이터베이스 잠금을 처리하는 .ldb 파일을 만들기 때문입니다. Jet는 "Temp" 디렉터리에 임시 파일을 만들 수 있으므로 해당 폴더에 대한 읽기/쓰기 권한을 부여해야 할 수도 있습니다.
2. 이 오류가 발생하는 두 번째 이유는 데이터베이스가 쓰기 권한이 있는 올바른 모드로 열리지 않았기 때문입니다. Connection 개체에 대해 Open 작업을 수행하는 경우 다음과 같이 Mode 속성을 사용하여 연결에 대한 권한을 나타내야 합니다.
SQL = "UPDATE 제품 세트 단가 = 2;"
Conn = Server.CreateObject("ADODB.Connection") 설정
Conn.Mode = 3 '3 = adModeReadWrite
Conn.Open "myDSN"
연결.실행(SQL)
연결 닫기
참고: 기본적으로 MODE는 일반적으로 업데이트를 허용하는 0(adModeUnknown)으로 설정됩니다.
3. 이 오류가 발생하는 또 다른 이유는 ODBC 관리자에서 DSN의 "옵션" 페이지에 있는 "읽기 전용" 설정이 선택되어 있을 수 있기 때문입니다.
4. 마지막 문제와 해결 방법은 모든 SQL 데이터 소스에 적용됩니다. 데이터베이스의 참조 무결성을 위반하는 SQL 문으로 인해 이 오류가 발생할 수 있습니다. 다음은 가장 일반적으로 실패한 쿼리 중 일부입니다.
• 가장 간단한 쿼리 집합은 변경할 수 없는 쿼리 집합입니다. 즉, UniqueValue 속성이 Yes로 설정된 크로스탭 쿼리, SQL 통과 쿼리, 통합 쿼리 또는 업데이트(즉, 테이블 만들기) 작업 쿼리입니다.
• 또 다른 일반적인 이유는 조인에 고유하지 않은 연결된 ODBC 테이블의 인덱스가 포함되어 있기 때문입니다. 이 경우 SQL은 테이블의 레코드가 고유하고 테이블의 필드 값이 쿼리에 따라 변경된다는 것을 보장할 수 없습니다.
• 확실히 믿을 수 있는 대안이 있는 데에는 이유가 있습니다. "일대다" 쿼리의 "일" 측에서 조인 필드를 업데이트하려고 하면 계단식 업데이트를 활성화하지 않으면 작업이 실패합니다. 그러면 JET 엔진에 참조 무결성을 위임할 수 있기 때문입니다.