DB내 데이터를 출력해보았으니 이제는 DB내 데이터를 추가/수정/삭제 하는 작업을 해보고자 한다.
이 작업은 DB데이터 조회와 거의 비슷하지만, 몇몇 과정이 추가된다.
우선 데이터를 추가/수정 하려면, 추가하려는 내용, 수정하려는 내용을 적어야 할 것이다.
그 내용을 적을 칸을 만들어야한다.
"지금 상태에서도 그리드의 표를 클릭하니 바로 수정이 되지 않는가?"
어떻게 보면 편리하지만, 어떻게 보면 불편하다.
수정할 생각 없이 그냥 클릭했는데, 키보드를 잘못 눌렀더니 데이터가 수정되어버린다?
사용자의 의도에 맞지 않는 기능을 수행하는 프로그램은 그저 버그 덩어리 프로그램일 뿐이다.
사용자가 수정을 원할 때만 수정이 가능한 프로그램을 만들어보자.
우선 edit 을 검색해보자
형광펜으로 표시한 3번째 컴포넌트를 클릭하여 배치해보자
TcxTextEdit 컴포넌트는 사용자가 텍스트를 입력할 수 있는 기입창이다.
(tkinter의 entry를 생각하면 된다)
Properties 의 Text 항목 값을 비워주면 텍스트 기입창에 기본으로 적혀있던 문구가 사라진다.
이 기입창에 그리드를 클릭하면 그 그리드의 특정 칸의 내용이 뜨도록 해볼 것이다.
그리고 그 내용을 수정할 수도 있게 해볼것이다.
우선 그리드의 특정 칸의 내용이 뜨게 해보자.
그리드를 클릭하고
좌측에서 Properties 옆에 Event 탭을 클릭해보자
OnCellClick 항목 옆에 빈칸 있다. 더블클릭해보자
그럼 또 다시 코드창이 나올 것이다.
특정 cell을 클릭하는 이벤트가 발생했을 경우 실행할 코드를 적을 것이다.
DB에 있는 컬럼 이름이 CORP_CD 이므로 이렇게 작성하였다.
이 상태에서 실행을 시킨다면, 우리가 클릭한 cell의 CORP_CD 열 값이 빈칸에 뜰 것이다.
뭔가 이상하다
분명 화살표가 뜬 것을 봐서 셀을 클릭을 했는데, CORP_CD 항목의 HUMM 이 빈칸에 뜨지 않고 있다.
이 오류를 해결해보자.
Grid 의 Properties 에서 dgEditing 항목의 값을 False로 바꿔주자.
그리드 내부의 값을 직접 수정할 수 없게 만드는 것이다.
Cell을 클릭하면 원래 클릭 이벤트가 실행이 되어야 하는데,
그 이벤트가 이 항목때문에, 그리드 내부의 값을 수정하는 것으로 연결되어
함수가 실행이 되지 않은 것이다.
다시 실행을 시켜보자.
기능이 원하는 대로 작동한다.
만약 클릭한 Cell의 값이 String이 아닌 Currency 타입의 항목이라면
코드의 AsString 대신 AsCurrency 를 작성해주면 된다.
이 과정을 계속 반복하여 각 컬럼 별로 값이 조회되도록 해보았다.
이제 원하는 값을 수정해보자.
우선 수정버튼을 하나 넣어준다.
(버튼 만들어 넣는 방법은 이전 포스팅에 있으니 생략하겠다.)
코드창에서 UI를 볼 수 있는 Form 창으로 돌아오는 단축키는 F12이다.
그 다음 쿼리를 하나 추가해준다.
"이미 있는 쿼리를 쓰면 안되는 것인가?"
우리는 이 그리드 컴포넌트로 현재 DB의 데이터를 조회하고 있다.
데이터를 조회하는 쿼리와 데이터를 수정하는 쿼리는 분명 다른 별개의 쿼리 이므로
새로 쿼리 컴포넌트를 만들어 실행시켜주어야 한다.
기존 쿼리를 수정하려면 전 포스팅에도 썼듯이 초기화를 해줘야 하는데,
초기화를 하는 순간 데이터 조회가 끊겨버린다.
따라서 새롭게 쿼리 컴포넌트를 하나 만들어준다.
이 쿼리도 같은 DB를 참조하는 쿼리이므로, 똑같은 DB에 연결되어야하고
그렇다면 그냥 이미 있던 세션에 그대로 연결해주면 된다.
이제 데이터를 수정하는 쿼리를 작성해보자.
'수정' 버튼을 눌렀을 때 수정이 되어야 한다.
Form 창에서 '수정'버튼을 더블클릭해 코드를 작성하자.
항상 쿼리 초기화부터 먼저 해준다.
현재 테이블에서 GROUP_CD, COMMON_CD, BRAND_CD, CORP_CD 항목들은 모두 필수키 값이다.
그 필수키 값을 활용하여, 내가 수정하려는 '행'을 하나로 특정한다.
특정한 행의 CODE_NM, CODE_SHTNM 값을 기입창에 적혀있던 값으로 수정하는 쿼리문이다.
":매개변수이름" 은 쿼리문에 사용하는 매개변수다.
쿼리컴포넌트.ParamByName('매개변수이름').매개변수자료형 := 매개변수로 전달되는 인자(값)
형태로 매개변수를 정의한다.
UPDATE, INSERT, DELETE 의 경우 SELECT 와 다르게 open이 아니라 execute 메소드를 사용한다
단순히 DB의 내용을 '열어서 보는 것' 이 아니라 쿼리의 내용대로 '실행 시켜' 조작해야하기 때문이다.
마지막에 지난 포스팅에서 만들었던 '조회' 버튼을 클릭했을 때 실행하는 함수를 실행시켜주었다.
그렇다면 데이터를 수정한 후, 수정되었습니다. 문구가 뜨고나서, 수정된 DB가 그리드에 나타날 것이다.
Delete, Insert 문도 사용하는 SQL의 문법에 따라 똑같이 사용하면 된다.
행을 클릭 하면 이렇게 클릭한 행 값들이 목록에 뜨고
사진처럼 값을 바꾼뒤 수정 버튼을 누르면
메세지 창이 뜨고
최종적으로 값이 수정되어 있음을 알 수 있다.
'인턴 > 델파이' 카테고리의 다른 글
[델파이] 2. 델파이 소스파일의 구성 (0) | 2021.02.18 |
---|---|
[프로젝트] 자동 메일 송신 프로세스 만들기(1) (0) | 2021.02.08 |
[델파이] 1. 델파이 프로젝트의 구성 (0) | 2021.01.08 |
[델파이 DB조작 예제] 3. Banded Table 사용해보기 (0) | 2020.08.28 |
[델파이 DB조작 예제] 1. DB서버에 연결해서 데이터 출력하기 (0) | 2020.08.28 |