* Powerbuilder 10.5


dw 컨트롤 편집 화면의 데이터가 Primary Buffer 에 반영되는 것에 대해서 다루고 있습니다.

그냥 데이터가 수정되자 마자 바로 반영시키면 좋을 텐데 말이죠.
파빌 내부적으로 어떤 이유가 있을 거라고 이해하고 넘어가는 게 좋겠습니다.





저장 버튼의 clicked 이벤트에서 저번 시간에 작성했던 스크립트를 코멘트 처리한 화면입니다.

이 상태에서 실행한 뒤, dw 데이터 수정 후 바로 저장버튼 눌러도 DB에 잘 반영이 됩니다. ㅎㅎ

원인은 Update 함수에 있습니다.
dw_emp.Update() 이 넘 말이죠.

여기서 Update 함수를 짚어 볼께요.

문법
  integer dwcontrol.Update ( { boolean accept {, boolean resetflag } } )


* 인수 양 옆으로 대괄호({ })가 사용되면 생략가능 인수임을 뜻함

인수 중에 accept 가 있네요. resetflag 인수는 살포시 무시하시고(지금 다루면 어렵습니다. ㅎㅎ)

accept
  True : AcceptText 수행함 (default)
  False : AcceptText 수행 안함


여기서 AcceptText 란 Primary Buffer 에 반영한다는 얘기입니다.

accept 인수는 True 가 디폴트 값이므로 생략하면 AcceptText 함수를 호출한 것과 같은 효과를 가져옵니다.

그러니까...Update 함수를 호출하면 자동으로 AcceptText 를 수행하는 거죠.

이렇게 되면 AcceptText 함수를 사용했던 이유는 결국 ModifiedCount 함수에 있습니다.
ModifiedCount 함수는 Primary Buffer 의 데이터만 체크하기 때문이죠.

이제 이해가 되시나요?



지금까지 dw 를 통해서 데이터를 조회, 수정, 삭제하는 것을 다뤄봤습니다. 하나 빠진게 있네요?
바로 추가하는 기능입니다. 요거는 다소 복잡한 내용을 포함하고 있습니다. 정식 바짝 차리시고...go go




추가 기능

먼저 추가 버튼을 생성하고 버튼을 아래와 같이 배치하시기 바랍니다.

추가 버튼
  Name : cb_insert
  Text : 추가




왠지 추가 버튼의 clicked 이벤트에 스크립트를 작성할 것 같죠? ㅎㅎ


그 전에 데이터를 추가하는 것에 대해서 생각해 보겠습니다.

dw 컨트롤을 이용해서 데이터를 추가하는데요. 결국 DBMS 에는 insert 문이 전달됩니다.


 

 


이 화면 기억나시나요?  안 난다면 13 강을 다시 보시구요.

이 화면에는 테이블로 emp 를, Primary Key 로 emp_empno 를 선택했습니다.

하나의 데이터 윈도우는 하나의 테이블만 다룰 수 있습니다.

우리가 데이터를 추가한다는 것은 emp 테이블에다 추가한다는 뜻이구요.

Primary Key의 값 not null 이면서 default 값이 없는 칼럼의 값도 반드시 넣어줘야 합니다.
그렇지 않으면 오라클 DBMS 에러가 발생합니다.

emp 테이블은 Primary Key 외에 not null 칼럼이 없으므로 Primary Key 인 emp_empno 만 신경쓰면 됩니다.

이 내용을 염두에 두고 강의를 보시기 바랍니다.

추가 버튼의 clicked 이벤트를 열어보세요.



이렇게 스크립트를 작성하구요.




 

 

 

InsertRow method (DataWindows)

설명
  dw 안에 로우를 추가

문법
  long dwcontrol.InsertRow ( long row )

  row 인수 바로 전에 로우 추가, row 가 0 이면 마지막에 로우 추가

반환값
  성공 : 추가된 로우 넘버
  에러 : -1



dw_emp.InsertRow(0) 에서 인수가 0 이므로 마지막에 로우를 추가하겠죠?

실행해서 확인해 보세요.

 



추가 버튼을 누를 때 마다 가장 마지막에 로우가 추가됩니다.

이제 추가된 로우의 아이템 마다 데이터를 넣어줘야 합니다.

먼저, d_emp 의 DataSource 에 들어가 보면 (DataSource 들어가는 법은 9강 참조)

select a.empno, a.ename, a.job, a.deptno, b.dname, b.loc
from emp a, dept b
where a.deptno = b.deptno
order by a.ename


dw 생성할 때 입력한 쿼리문이 나옵니다.

a.empno 칼럼는 d_emp 레이아웃의 emp_empno 와 연결됩니다.
다른 칼럼들도 마찬가지구요. (이 부분이 이해 안 가면 10강을 다시 보고 오세요. 꼭요~)

a.empno -> emp_empno
a.ename -> emp_ename
a.job -> emp_job
a.deptno -> emp_deptno
b.dname -> dept_dname
b.loc -> dept_loc

emp_empno : Primary Key 이므로 empno 칼럼의 다른 데이터와 충돌 나지 않게 데이터를 넣어야 합니다.
emp_ename : dw 컨트롤 편집 화면에서 사용자가 직접 넣으면 됩니다.
emp_job : dw 컨트롤 편집 화면에서 직접 넣으면 되지만 직책이므로 아무렇게나 넣으면 안될 거 같구요.
                 직책 목록 같은 데서 선택하게끔 하면 좋을 거 같네요.
emp_deptno : 이 넘은 dept 테이블의 deptno 칼럼과 조인되므로 dept 테이블의 deptno 칼럼 값에서 
                      선택하게 하면 좋겠어요.

dept_dname, dept_loc : 여기에 넣는 데이터는 실제 DB에 반영되지 않습니다만, dw 컨트롤 편집화면에는
                                       보여져야 하겠죠? a.deptno 에 값 넣을 때, 함께 넣으면 될 듯 합니다.




다음 시간부터 하나 하나 살펴 보겠습니다.

수고하셨어요.


* 질문은 댓글에...

 

 

 

Posted by A4M
,