Q&A

  • UpdateSQL관련 입니다. 잘 부탁드립니다.


고수님께 여쭈옵니다.

안녕하세요…

오늘도 프로그램 하시느라 고생이 많으시지요…



프로그램 하다 UpdateSQL에 관해 이해되지 않고 무지

머리가 복잡해서 아래와 같이 글을 오립니다.

행복하시고 항상 즐거움과 해운이 함께 하시길 빌며

고수님의 고견을 부탁드립니다.



델파이 5, DB : paradox7

Query , DataSource, DBGrid

UpdateSQL로 수정, 삽입, 삭제 실행



질문 1. UpdateSQL로 사용할 때 SQL 문장을 만들기 전에

“Selector Primary Keys”를 선택하는데 하나의 필드를 저정할 때, 두개의 필드

그리고 필드 전부를 지정할 때 어떤 차이가 있는지 아직 감이 안 잡히네요.



저 같은 경우는 하나의 필드에 해당하는 레코드만 입력해도 삽입,삭제 수정이

가능 하도록 되어야 하는데. 이럴때는 어떻게 Primary Keys를 지정 해야 하는지요?



질문 2. DBGrid에서 data를 삭제를 실행하면 잘 되는데 실제 데이터베이스를 열어보면

해당 레코드에 Data는 없고 빈 레코드로 존재 하던데.. 이 레코드 까지

삭제를 할려면 어떻게 해야 하나요?



예를 들어 하나의 필드 데이터를 삭제하면 그에 해당하는 레코드가 완전히

삭제되도록 말이죠..



질문 3. 제가 프로그램하다 나타나는 현상인데 왜 그런지 모르겠네요..



조건 : Primary Keys를 전부 다 지정 했을 때



가.새로운 데이터를 삽입하여 저장하는데는 아무 문제가 없었습니다.

나.레코드에 모든 필드에 데이터를 다 입력했을 경우 수정, 삽입 ,삭제 가능합니다.

다.두개의 똑 같은 레코드가 존재하면 수정, 삭제에 Error가 나타납니다.

라.하나의 레코드에 데이터가 하나라도 비워 있으면 수정 삭제시 에러가 나타납니다.

마.위와 같은 레코드가 하나만 존재해도 수정 삭제시 에러가 나타 납니다





조건 : Primary Keys를 하나만 지정 했을 때



가.새로운 데이터를 삽입하여 저장하는데는 아무 문제가 없었습니다.

나.같은 필드에 같은 Data가 있는 레코드가 다섯 개 있다고 가정합니다..

그런데 그 중 하나의 레코드를 수정할 때 에러가 발생하면서 다섯개의 레코드에

있는 데이터가 전부 수정된 데이터로 다 바뀌어 버립니다.

(우와! ~ 설명하기 어렵당…!!)

잘 이해 되실런지는 모르겠는데… 아무튼 좀 복잡합니다.



너무 길어 죄송하니다.

즐거운 프로그램 하십시요...

1  COMMENTS
  • Profile
    김지엽 2001.02.20 22:33
    음.. 제가 제대로 알고 하는 이야기일지는 모르겠지만요..



    키 필드는 고유값을 가지고 있는 필드여야 합니다. 말하자면, 키 필드값이 같은 레코드가 여러개이면 안되는거죠. 통상적으로 키 필드의 데이터형을 Paradox에서는 (+)형으로 달아주는 경우가 대부분이죠? 자동증가값을 씀으로서 별다른 관리를 안해줘도 레코드마다 키필드에는 고유값이 부가되도록 하는 거죠.. 이렇게 관리되고 있는 필드를 키 필드로 지정을 해줘야 합니다.



    UpdateSQL에서 키 필드를 지정해 달라는건 바로 그런 키값을 지정해 달라는 겁니다. 그러니까, 실지로 키값으로 기능하고 있는 필드를 지정해줘야 합니다. 한데 Table들을 Join해 줘서 일종의 View를 형성한 Query의 경우에는, 엎데이트가 반드시 하나의 테이블에 대해서만 이뤄진다는 보장이 없죠. 그래서 키 필드를 여러개 지정할 수 있는 걸로 압니다.



    테이블의 키 필드가 원칙적으로 잘 돌아간다면 에러는 안나겠지요.



    실지로 UpdateSQL에서 자동생성되는 SQL구문을 보면, 그 키 필드를 가지고



    where 키필드명 = Old_키필드값



    이런 형식의 조건문을 삽입시키고 있지요... 키 필드가 가지는 의미를 생각해 보시면 별로 어려운 문제가 아닐 듯 합니다.