2009-07-29 3 views
4

고객이 실수로 "자동 번호"로 생성 된 기본 ID 필드가있는 액세스 테이블에서 약 500 개의 레코드를 삭제했습니다. 자동 번호 열을 꺼서 (다시 정수로 변경) 백업에서 누락 된 500 개의 레코드를 복원 할 수 있었지만 현재 자 동 번호를 다시 설정할 수는 없습니다 ...MS Access 자동 번호 문제

가능한 해결책은 무엇입니까? ? ID 필드는 다른 테이블에 대한 링크로 사용되므로이 번호를 참조하는 모든 테이블의 번호를 다시 매기 지 않고 번호를 다시 매길 수는 없습니다 (목의 통증, 가능).

데이터가 이미 테이블에 존재하는 경우 max (id)를 시작점으로 사용하여 자동 번호를 다시 설정하는 데 "트릭"이 있습니까?

+0

에 새 필드의 이름을 변경,하지만 난 물어해야합니다. DB를 백업하지 않았습니까? – JohnFx

답변

4

ID 번호 필드를 AutoNumber로 사용하여 newTable을 만듭니다. 모든 필드는 원본 테이블과 동일해야합니다 (ID 제외). newTable에 originalTable에서 모든 데이터를 복사 : 데이터가 작성되면

INSERT INTO newTable SELECT * FROM originalTable 

을 originalTable을 삭제하고 originalTable에 newTable 이름을 바꿉니다.

이렇게하면 자동 번호 매기기의 모든 "구멍"이 보존되고 newTable에 자동 번호 매기기가 설정됩니다.

P. 항상 ID에 외래 키를 추가하십시오. 이 경우 일부 데이터가 삭제 되더라도 적어도 일관된 상태를 유지하게됩니다.

+0

원본 테이블을 삭제할 때와 새 테이블의 이름을 바꾼 후에 관계를 제거하고 다시 만드는 것을 잊지 마십시오. 마지막 문장은 나에게 많은 의미가 없습니다. 외래 키가없는 테이블이 있습니다. 이들을 일반적으로 "마스터"테이블 또는 참조 테이블이라고합니다. 예 : 거래 유형, 국가 또는도/주 테이블. 그리고 나는이 경우 "일관된 국가"가 의미하는 바를 잘 모릅니다. –

+0

나는이 DB를 올바르게 설치했음을 동의한다. (적어도 그렇게 쉽지는 않다.) 아아, 많은 프로젝트에서와 마찬가지로, 나는 피해가 완료된 후에 불려간다. 액세스는 올바르게 설정되지 않았기 때문에 프로그래머가 아닌 사람들도 상당히 "괜찮은"솔루션을 얻을 수있게 해주는 도구 중 하나입니다. "메일 룸의 조"가 실제로 프로그래밍 할 수 없다는 것을 알게되면 많은 사람들이 SQL 서버 솔루션으로 업 사이즈 클라이언트를 처리하게됩니다.>) –

+0

여러분이 이상한 일을하기 때문에 액세스가 무례한 점이 많습니다. 그들이하는 일을 모른 채. 그러나 이봐, 엑셀을 사용하는 것보다 낫다. 심지어 더 나쁜 것은 워드 테이블이다. –

0

동의하지만 일련 번호가 올바른 순서인지 확인하기 위해 ORDER BY를 추가 할 수 있습니다. 그렇지 않으면 다른 테이블에 잘못된 ID 연관이 생깁니다.

INSERT INTO newTable SELECT * FROM originalTable ORDER BY ID 

당신은 명시 적으로 대신 내가 주어진 답변을 추가 할 수 있다면 *

+0

두 번째 테이블을 첫 번째 테이블과 동일하게 만들려면 명시적인 이름이 필요하지 않습니다 (ID 필드 제외). ID 번호 순서 지정은 자동 번호 매기기가 SELECT 문에서 ID로 "재정의"되었으므로 여기서는 아무 것도하지 않습니다 (ID는 자유롭게 선택되지 않습니다). 모든 ID는 원본 테이블에서 가져온 것이므로 새 ID가 도입되지 않으며 잘못된 ID 연결이 발생하지 않습니다. –

+0

*에 동의하면 원래 게시물의 'ID 제외'의견을 볼 수 없습니다. 그러나 당신은 여전히 ​​ORDER BY가 필요할 것입니다. 그는 삭제 된 500 개의 레코드를 되돌릴 때 마지막 행으로 테이블에 들어갑니다. 따라서 원래 테이블의 ID는 정확하지만 올바른 순서는 아닙니다. 예를 들어 , 삭제 행이 원래 표는 다시 추가 : 1 고양이 2 개 5 말 3 마우스 (다시 추가) 4 토끼 (다시 추가) 당신은 일을하지 않고 새 테이블에 이상이 복사하는 경우 아이디에와 일련 번호가 켜져와 BY ORDER, 당신은 얻을 것이다 : 1 고양이 2 개 3 말 4 마우스 5 토끼 잘못된 ID를 제트 4에서, 당신은 또한 ADO에서 일련 번호 씨앗을 설정할 수 있습니다에 –

1

을 사용하는 필드의 이름을 지정해야합니다.

액세스 자동 번호 필드에 대해 알려진 사실은 데이터베이스를 압축하고 복구 할 때 카운터가 재설정된다는 것입니다.

삽입을 수행하면 자 동 카운트 카운터의 다음 숫자가 아닌 숫자가 자동으로 사용되는 내부 카운터보다 큰 경우 (제공된 것보다 큼) 번호 필드는 (전혀 확인의 의미는 무엇입니까?) 당신은 카운터가 1로 설정해야합니다 새로운 액세스 테이블에서 이런 일을 할 수있는 즉

...

INSERT INTO myTable (myAutoNumber,myOtherField) VALUES (10000,'other data') 

다른 여기에 언급 된 솔루션은 더 나은 결과를 보장하기 때문에 더 좋습니다. 그래서 나는 학업적인 이유로 거의 언급하지 않습니다. 너무 늦기 지금은 비록

세스

+0

암호. –

+0

Jet 3.5 (Access 97 용)에서 autonumber 시드는 compact 필드의 가장 높은 autonumber id로 다시 설정되었습니다. 그러나 Jet 4.0 (Access 2000 이상)에서는 테이블에 레코드가없고 시드가 0으로 다시 설정되는 경우에만 발생합니다. –

+0

실제로 자동 번호 필드의 값이있는 레코드를 테이블. autonumber 값이 이미 테이블에없는 한. ID가 자동 번호 필드 인 직접 실행 창에서 currentdb.Execute ("INSERT INTO Table1 (ID, textfield) VALUES (2, 'Record ID 2')")를 직접 테스트했습니다. –

1

이상적인 솔루션은, 작업 테이블에 누락 (500 개) 기록을 복원하고 wouuld've. 그런 다음 기본 테이블에 추가 쿼리를 수행하십시오. 여기에는 Autonumber 필드가 포함됩니다.

0

당신은 새로운 분야를 확인하고이를 자동으로 번호를 확인한 다음 id 필드를 삭제하고 내가 요시프의 방법은 작동하는지 확인할 수 있습니다 ID