* Powerbuilder 10.5

파워빌더 강의를 보고 계시는 개발자 여러분~~~
어떻게 잘 따라오고 계십니까?

지금 제공되는 강의 내용은 일반적인 파워빌더 초보자용입니다.
DBMS 연동, 추가기능, 삭제기능, 수정기능, 저장기능 등등...
DB 연동 어플리케이션의 가장 기본적인 기능들입니다.

어떤 언어든 처음 접하는 입장에서는 생소한 개발 환경과 수많은 메소드 그리고 까다로운 문법에 적응하기가 쉽지는 않습니다. 인내심이 요구되는 대목입니다.

가능한한 쉽게 진행을 하려고 노력하고 있습니다만 기대에 못 미칠 때가 많으리라 생각합니다.

초보자들에게 알맞게 강의 내용을 조절하고 있는지 제가 파악하려면 여러분의 피드백이 꼭 필요합니다.
내용을 따라가기 어렵거나 설명이 더 필요할 경우 댓글로 남기시면 가능한한 상세하게 답변해 드리겠습니다.



저번 강의 숙제가 있었는데요.
d_emp 의 부서위치 칼럼(dept_loc) 도 부서명 칼럼(dept_dname)과 동일하게 설정하라는 것이었습니다.

다음 과정으로 만들면 됩니다.

1. DropDownDW 타입에 사용할 dw 를 만든다.
2. dw 칼럼의 속성창에서 Style Type 속성을 DropDownDW 로 설정한다. DataWindow 속성에 1번에서 만든
   dw 를 연결하고 Display Column, Data Column 속성에 적당한 칼럼을 지정한다.
3. 수정이 가능하도록 Tab Order 를 부여한다.



부서위치 칼럼을 위의 순서로 설정했다고 보구요. 

부서위치 칼럼의 속성을 좀 변경해 보겠습니다.

Tab Order 를 0 으로 세팅하고 속성창 - Edit 탭 - Always Show Arrow 를 체크해제 합니다.

DropDownDW 의 형태를 빌리되 DropDownDW 에서 제공하는 목록 팝업창은 사용하지 않겠다는 의도입니다.





Display Column : loc

Data Column : deptno

실행해 보세요.

 

 



실행해서 위 화면과 같이 나오면 됩니다.

임의의 로우에서 사원명에 커서를 두고 탭 키를 연속해서 눌러보세요.

커서가 탭오더를 부여한 순서대로 이동하고 다음 로우 넘어 가서 동일하게 이동하는 것을 볼 수가 있습니다.

탭오더는 말 그대로 탭을 눌렀을 때의 커서 이동 순서를 정하는 거죠.




이번 강의 내용 진행하겠습니다.

[dddw_dname]
dname (Display Column)      deptno (Data Column)
  ACCOUNTING                      10
  OPERATIONS                       40
  RESEARCH                          20
  SALES                                30

[dddw_loc]
loc (Display Column)            deptno (Data Column)
   BOSTON                             40
   CHICAGO                            30
   DALLAS                              20
   NEW YORK                          10



DataSource 에 a.deptno, b.deptno as dname, b.deptno as loc 라고 작성되어 있으므로
부서번호 칼럼과 부서명 칼럼 그리고 부서위치 칼럼은 모두 deptno 칼럼 값을 가지고 있습니다.

1.부서명을 클릭했을 때 열리는 목록 팝업창에서 SALES 를 선택한다면 보이는 데이터(Display Column)는 SALES 이지만 실제 데이터(Data Column)는 30 (deptno) 이 됩니다.

2.만약 부서명 칼럼에 10 을 세팅(SetItem)하면 부서명에서 보이는 데이터은 ACCOUNTING 이 되고 실제 데이터는 10 이 됩니다.

이 관계를 잘 알아두시기 바랍니다.



4.emp_deptno : 이 넘은 dept 테이블의 deptno 칼럼과 조인되므로 dept 테이블의 deptno 칼럼 값에서
                      선택하게 하면 좋겠어요.
5.dept_dname, dept_loc : 여기에 넣는 데이터는 실제 DB에 반영되지 않습니다만, dw 컨트롤 편집화면에는
                                   보여져야 하겠죠? emp_deptno 에 값 넣을 때, 함께 넣으면 될 듯 합니다.


부서명 값을 세팅하고난 뒤에 그 값을 받아 부서번호와 부서위치에 넣어주면 4,5 번 모두 해결됩니다.

부서명 값을 세팅하고난 뒤에 그 값을 받아 -> dw_emp의 Itemchanged 이벤트
부서번호와 부서위치에 넣어주면 -> SetItem 함수
 

ItemChanged event (DataWindows)
  dw 컨트롤의 칼럼이 수정되고 난 다음 포커스를 잃었을 때-엔터키, 탭키, 화살표키를 누르거나 dw 안의 다른

  칼럼을 클릭할 때- 발생한다.


ItemChanged 이벤트는 어떤 칼럼의 값이 변경될 때 발생합니다.
부서명 칼럼을 수정하면 이 이벤트가 발생합니다.

dw_emp 의 ItemChanged 이벤트에 들어가 보세요.




ItemChanged ( long row, dwobject dwo, string data ) returns long [pbm_dwnitemchange]

row : 수정된 칼럼이 속한 로우
dwo : 수정된 칼럼(dw 내의 오브젝트)
data : 수정 후의 데이터




dwo 라는 놈은 좀 특이합니다. 파빌에서도 대충 정의해 놓고 쓰고 있는 걸로 보이는데요. 그 사용 방법만 알면 충분할 것 같습니다. dwo 는 이벤트에서 인수로 제공되구요. dw 의 object 속성에 제한적으로 접근할 수 있습니다.

dwo.name 은 이벤트가 발생한 object 의 Name 속성 값을 받아옵니다. string 타입이죠

If dwo.name = 'dept_dname' Then 라고 했으니 이벤트가 발생한 칼럼명이 'dept_dname'(부서명) 인지를 체크합니다. 부서명이 아니면 그 다음 스크립트는 수행이 안 되게 했습니다.

data 인수는 수정 후의 데이터입니다. 그 값을 부서번호(emp_deptno) 와 부서위치(dept_loc) 에 세팅해야 하는데요. 타입이 다릅니다. data 는 string 형이고 두 칼럼은 모두 decimal(Column Specification 에서 확인) 입니다.

타입이 다를 때는 값을 넣을 수 없습니다. 그래서 변환(convert)을 해야 합니다.

Integer PowerScript function

설명
  string 값을 integer 로 변환한다.

문법
  Integer(string)

반환값
  integer 로 변환한 string 값



integer(data) 요렇게만 하면 형변환이 되는거죠

decimal 은 실수형이니 정수형인 integer 값을 넣어도 되겠죠?


그럼 실행해서 확인해 보세요.



새로운 로우를 추가해서 해도 되고 조회된 로우에서 해도 됩니다.




중요한 내용입니다. 꼭 숙지하시길....

수고하셨습니다.


*질문은 댓글에...

 


Posted by A4M
,