드로우홀릭 더베이직

추가쿼리에서 키위반 오류 문의드립니다

2022.07.17 13:05:18 조회 수 34957 추천 수 0

액세스2010 교재 565P의 추가쿼리 따라하기중 '키 위반' 으로 추가 할 수 없다는 오류가 나와서요.

3일째 고민하고 있는데 도통 잘 모르겠어서 글 올립니다.

영업프로젝트는 잘 되었는데 나머지 영업진행사항, 영업예약작업 시엔 계속 오류가 발생하고 있습니다.

버전 문젠가 아니면 중간에 첨부파일 필드가 있어서 그런가 이리저리 필드 순서, 속성 등 살펴봤는데 잘 모르겠습니다.

버전 문제나 첨부파일 문제라면 영업프로젝트도 않되어야 되는데 그건 잘 마무리 되었습니다.

추가쿼리오류.png


엮인글 '1'

https://www.td21.com/index.php?mid=qna&document_srl=17252&act=trackback&key=e50

2023.06.13 18:02

"itemListElement":[{"@type":"ListItem" - {%22@context%22

TeamData21 : TD21 - 추가쿼리에서 키위반 오류 문의드립니다


profile

돌직구

2022.07.18 15:12:56
*.157.124.116

키 위반 오류는 그 원인이 다양합니다.
고유 인덱스, 참조 무결성 등의 원인이 있습니다.
어떤것이 원인인지 알아봐야 합니다.

우선 첨부파일을 다운로드 받고, 문제가 되는 쿼리('q추가_영업진행사항')을 열어보았습니다.
'영업진행사항1' 테이블의 내용을 '영업진행사항' 테이블에 추가하는 것이네요.
이것이 맞지요?

그렇다면 대상이 되는 테이블인 '영업진행사항' 테이블을 살펴봐야 합니다.
고유 인덱스는 설정된 것이 없어서 별 문제가 되지 않습니다.
그렇다면 참조 무결성을 살펴봐야 합니다.

'영업진행사항' 테이블은 '프로젝트ID'에 참조무결성이 설정되어 있습니다.
'영업진행사항' 테이블의 '프로젝트ID' 필드는 '영업프로젝트' 테이블의 '프로젝트ID' 필드값만 쓸 수 있다는 말씀입니다.
현재 '영업프로젝트' 테이블의 '프로젝트ID' 필드값은 1~28, 128~226 까지 있네요.

그런데, 추가해야 하는(원본이 되는) '영업진행사항1' 데이터는 '프로젝트ID' 필드값이 '29~127' 까지 있습니다.

원인을 찾았습니다. '29~127' 까지의 프로젝트 정보를 '영업프로젝트' 테이블에 등록한 후, 이 쿼리를 실행하면 문제가 해결될 것입니다.

그러나, '프로젝트ID' 값은 일련번호이기 때문에, 내 맘대로 필드값을 변경할 수가 없죠?

지금 이 예시가 비즈니스적으로 의미가 있다면, 제가 해결책을 드릴 수 있을 것 같은데..
지금 예시는 그냥 연습해 보는 것 같아 (비즈니스 로직이 없어보여) 해결책을 드릴수가 없습니다.

어쨌든 현재 상태에서의 추가 쿼리는 실행이 불가능합니다.
(굳이 따지자면, '영업진행사항' 테이블의 참조무결성을 끊고 추가 쿼리를 실행할 수는 있습니다.)

박형근

2022.07.19 13:44:24
*.226.112.117

강사님의 답변에 감사드립니다.

덕분에 제딴엔 중요한 내용을 알게 되었습니다.

다행히 100여건의 데이터기에 참조무결성을 끊고 추가쿼리 실행해서 일일이 '프로젝트ID'값 수정해서 맞춰놓고

다시 참조무결성 설정해서 완료했습니다만 이게 1000건 이상만 되도 아찔하단 생각이 들더군요.

아직은 배우는 단계라 따라해가면서 조금씩 익혀나가고 있습니다.

그런데 여기서 의문점이 드는군요. 제가 너무 몰라서 그런거겠지만요.

교재를 따라서 한건데 왜 '프로젝트ID' 값이 중간에 붕뜬건지요?

일련번호기 때문에 연속적으로 연결되어야 하는데 말이죠.

사실 강사님께서 답변에 '프로젝트ID' 필드값이 1~28, 128~226 까지 있다고 해서 저도 알았습니다.

그 전엔 '프로젝트ID'값의 내용은 보지도 않고 레코드가 '추가되었구나' 라고만 확인했었거든요.

profile

돌직구

2022.07.19 13:51:45
*.157.124.116

일련번호는 일반적으로 연속적으로 연결되어 생성되는 것이 맞습니다.
그러나 한 번 생성된 번호는 다시는 생기지 않는다는 규칙도 있지요.

그래서 한 번 생성한 번호를 삭제하거나, 특히 대량의 데이터를 추가하려다 취소하는 경우 등에는 중간에 붕 뜬 값이 생길 수 있습니다.

왜 이런 규칙을 사용할까요?
이빨빠지는 것을 방지하려면, 항상 테이블에서 가장 큰 값에서 1을 더하는 로직을 써야 합니다.
테이블이 엄청 크다면, 일련번호를 생성할 때 마다 엄청난 연산이 필요할 수 있겠죠?
또, 동시에 여러 사람이 입력할 때, 같은 값이 생기는 것을 막을 수 없습니다.

이런 이유 때문에 '한 번 생성된 번호는 다시는 생기지 않는' 것입니다.

이빨빠진 것, 보기 싫다고 생각하실 수 있는데, 어쩔 수 없습니다.
만약 동시성 문제가 없다고 가정한다면, 구현할 수는 있지만 '일련 번호' 데이터 형식은 사용하지 못합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 FAQ: 어떤 과정을 수강하는 것이 좋을까요? 외 돌직구 2017-08-29 31083
공지 좋은 답변을 이끌어 내는 방법 [1] 돌직구 2017-07-14 27398
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 22915
456 실행버튼 1 열심 2022-07-28 1357
455 다른PC에서는 왜정상작동이 안되는지요? 1 열심 2022-07-27 2181
» 추가쿼리에서 키위반 오류 문의드립니다 file 3 1 박형근 2022-07-17 34957
453 온라인강의(비메오vimeo) 동영상 재생 오류 7 디비32 2022-07-06 692
452 엉뚱한 질문 하나 드립니다... 아놀드 2022-06-14 420
451 액세스 화면색상이 이상해져서 문의드립니다 file 1 박형근 2022-06-05 1568
450 안녕하세요 기본적인 질문입니다. 5 으흐흐 2022-06-03 65
449 엑세스 오류 file 1 엑세스00 2022-05-12 2177
448 테이블에서 일대다 폼으로 레코드를 읽어오기 file 3 원죽 2022-04-05 620
447 날짜간의 시간차이를 "시분초"로 표현하고 싶습니다. file 1 엑세스초보탈출 2022-01-02 3510
446 압축 및 복구에 대한 문의입니다. 3 vrn001 2021-12-23 2966
445 액셀과 엑세스 VBA 차이점 문의 2 겨루기 2021-12-08 15091
444 오프라인 수업 문의 드립니다.~ 2 문건 2021-12-08 521
443 튜터링 범위에 대한 문의입니다. (Azure를 이용한 메일 보내는 기능 관련) 4 vrn001 2021-11-19 193
442 로그인된 유저이름 반환하기 가능할까요?? 2 아놀드 2021-11-08 238
441 Collection 관련 문의입니다. 8 vrn001 2021-11-05 178
440 2013 초급동영상 중 질문사항 입니다 file 2 푸리쏠 2021-10-29 283
439 팝업폼 테두리스타일 문의드립니다. file 6 vrn001 2021-10-28 297
438 2013으로 최신 엑세스를 공부해도 될까요? 3 guv 2021-10-19 3073
437 설치 후 실행시 오류 5 차가운묵 2021-09-30 3039


  주소  12925 경기도 하남시 미사대로 540, B동 917호 (현대지식산업센터 한강미사2차) ㈜팀데이터이십일  |  고객센터 전화번호  02-467-2998  |  대표이사  염기웅
개인정보관리책임자  염기웅 (ml_privacy@td21.com)  |  사업자등록번호  120-86-79260  |  통신판매업신고번호  제 2021-경기하남-1166 호  [사업자 정보 확인]
  TD21의 사전 서면 동의 없이 TD21 사이트 일체의 정보, 콘텐츠 및 UI 등을 상업적 목적으로 전시, 전송, 스크래핑 등 무단 사용할 수 없습니다.