드로우홀릭 더베이직

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

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

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

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

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

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

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

추가쿼리오류.png


엮인글 '1'

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

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
번호 제목 글쓴이 날짜 조회 수sort
공지 FAQ: 어떤 과정을 수강하는 것이 좋을까요? 외 돌직구 2017-08-29 31952
공지 좋은 답변을 이끌어 내는 방법 [1] 돌직구 2017-07-14 28101
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 23150
520 특정 테이블의 필드 값을 다른 테이블로 옮기는 작업 1 1 thedream77 2014-12-18 45939
519 하나의 폼에서 데이터 입력 및 조회 구현 file 1 park 2018-08-22 45650
518 한 필드에서 여러개의 같은 데이터중 한개의 데이터만 가져오는 방법 2 백두산 2020-06-05 43194
» 추가쿼리에서 키위반 오류 문의드립니다 file 3 1 박형근 2022-07-17 36414
516 엑세스로 재고관리대장을 만들계획입니다. 2 1 똥구녕멍멍 2019-04-18 32635
515 외부데이터 "가져오기 오류 - 형식변환실패"의 의미는~? file 1 1 방랑김사깟 2017-02-19 32297
514 액셀의 데이타(하이퍼링크)를 복사해서 기존의 액세스 테이블에 붙이기 file 3 1 광야에서살아남기 2015-08-21 31381
513 이벤트 에러 file 4 1 엑세스29 2017-06-15 29770
512 엑세스 데이터베이스 일관성 에러 문의 1 박상순 2021-02-22 28721
511 목록상자 클릭시 클릭한 COL, ROW의 값 vb로 받아오기 2 쐬주도사 2017-12-15 28339
510 메시지박스의 체크박스로 테이블의 체크박스 컨트롤하기 1 공잇 2016-04-07 28057
509 엑셀파일 불러오기 오류 문의 file 3 기영주 2016-02-16 27757
508 vba에서 날짜 포멧 변환 질문드립니다. 1 1 쐬주도사 2017-12-18 27253
507 액세스 데이터베이스 딜레이 및 멈춤 문제 file 1 3 전맥 2016-10-11 26761
506 리스트박스의 선택된값을 해제 하려면 어떻게해야하나요, 1 김은교 2016-01-16 26174
505 통화 필드에 단위($ 또는 \)표시가 저장 안 되게 할 수 있을까요? 3 클로이 2019-07-04 26114
504 입력식에 유호하지 않는 날짜값이 있습니다. 2 sky3300 2019-03-26 25240
503 액세스 DB 파일 용량 문제 문의 드립니다. 4 바남풍 2019-08-26 25020
502 사진이나 그림 삽입 방법 1 notebook01 2016-05-01 25015
501 텍스트 가져오는 데 문제가 생겨요. 1 당연히나지 2021-01-24 24469


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