원래 KB 번호: 884185
증상
Autonumber 필드가 있는 테이블에 새 레코드를 삽입하려고 하면 다음 오류 메시지가 표시될 수 있습니다.
인덱스, 기본 키 또는 관계에서 중복된 값을 만들었기 때문에 테이블에 요청된 변경 사항이 적용되지 않았습니다. 필드의 데이터 또는 중복 데이터가 있는 필드를 변경하거나 인덱스를 제거하거나 중복이 가능한 인덱스로 다시 정의하여 다시 시도하십시오.
참고
테이블에 관계 또는 인덱스가 없을 수 있습니다.
원인
이 문제는 Autonumber 필드가 잘못 시드되었을 때 발생합니다.
해결 방법
이 문제를 resolve 수 있는 여러 가지 방법이 있습니다.
방법 1: 압축 및 복구 수행
데이터베이스를 압축하려면 다음 단계를 수행합니다.
액세스를 시작합니다.
Access 데이터베이스를 엽니다.
참고
보안 경고 대화 상자가 표시되면 열기를 클릭합니다.
데이터베이스 도구 리본 탭을 클릭한 다음 도구 그룹 내에서 데이터베이스 압축 및 복구를 클릭합니다.
참고
이전 버전의 Access에는 데이터베이스 압축 및 복구 옵션이 있을 수 있습니다. 이 옵션을 찾으려면 특정 버전의 Access에 대한 설명서를 참조하세요.
Autonumber 필드 시드를 수동으로 다시 설정하려면 다음 방법 중 하나를 사용합니다.
방법 2: 데이터 정의 쿼리 사용
Access에서 테이블(백 엔드 데이터베이스)이 있는 데이터베이스를 엽니다.
만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
테이블 표시 대화 상자에서 닫기를 클릭합니다.
디자인 탭의 결과 그룹에서 SQL 보기를 클릭합니다.
Query1 창에 다음을 입력합니다.
ALTER TABLE TableName ALTER COLUMN AutoNumFieldName COUNTER(iMaxID,1);
참고
<TableName> 은 테이블 이름의 자리 표시자입니다 <. AutoNumFieldName> 은 Autonumber 필드의 이름에 대한 자리 표시자입니다. iMaxID 는 필드의 현재 최대값에 1을 더한 자리 표시자입니다.
디자인 탭의 결과 그룹에서 실행을 클릭합니다.
방법 3: Visual Basic for Applications 코드 실행
만들기 탭에서 매크로 아래의 아래쪽 화살표를 클릭한 다음 모듈을 클릭합니다.
Visual Basic 편집기 다음 코드를 붙여넣습니다.
Sub ResetAuto() Dim iMaxID As Long Dim sqlFixID As String iMaxID = DMax("<AutonumberFieldName>", "<TableName>") + 1 sqlFixID = "ALTER TABLE <TableName> ALTER COLUMN <AutonumberFieldName> COUNTER(" & <iMaxID> & ",1)" DoCmd.RunSQL sqlFixID End Sub
참고
자리 표시자 <AutonumberFieldName> 은 Autonumber 필드의 이름을 나타냅니다. 자리 표시자 <TableName> 은 테이블의 이름을 나타냅니다.
실행 메뉴에서 하위/사용자 폼 실행을 클릭합니다.
참고
두 방법 중 하나를 사용하려면 먼저 테이블을 닫아야 합니다. 두 메서드 중 하나를 성공적으로 사용한 후에는 쿼리 또는 모듈을 저장할 필요가 없습니다.
동작을 재현하는 단계
새 빈 데이터베이스 만들기
다음 두 필드가 포함된 Table1 이라는 새 테이블을 만듭니다.
Field1: Autonumber(기본 키) Field2: Text
Table1에 다음 6개의 레코드를 추가합니다.
Field1 Field2 1 A 2 B 3 C 4 D 5 전자 6 F Field1 값이 3인 레코드를 삭제합니다.
만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
테이블 표시 대화 상자에서 닫기를 클릭합니다.
디자인 탭의 결과 그룹에서 SQL 보기를 클릭합니다.
Query1 창에 다음을 입력합니다.
INSERT INTO Table1 (Field1, Field2) SELECT 3 AS Field1, "C" AS Field2;
디자인 탭의 결과 그룹에서 실행을 클릭합니다.
Table1을 연 다음 새 레코드를 추가합니다. "증상" 섹션에 언급된 오류 메시지가 표시됩니다.