* Powerbuilder 10.5


저번 강의 숙제를 해결하려면 d_emp의 emp_job 칼럼에 Tab Order 를 부여해야 합니다.




이제 실행해 보면










직급 칼럼을 클릭하면 직접 입력한 목록이 열리고 기존의 직급 칼럼의 값도 수정할 수 있게 됐습니다.

임의의 사원 직급을 수정한 뒤 저장한 후에 조회해 보세요. 수정된 내용이 조회가 되나요? 수정전의 데이터가 조회되어야 정상입니다. 그 이유를 살펴보죠.





Update Properties 화면입니다.

여기서 Updatable Columns 에 emp_job 이 선택이 안 되어 있어서 DB에 반영이 안됩니다.
emp_empno, emp_ename, emp_job, emp_deptno 가 수정하려는 칼럼이므로 모두 선택해 주세요.





실행해서 확인해 보시구요.



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

1.emp_empno : Primary Key 이므로 empno 칼럼의 다른 데이터와 충돌 나지 않게 데이터를 넣어야 합니다.
2.emp_ename : dw 컨트롤 편집 화면에서 사용자가 직접 넣으면 됩니다.
3.emp_job : dw 컨트롤 편집 화면에서 직접 넣으면 되지만 직책이므로 아무렇게나 넣으면 안될 거 같구요.
직책 목록 같은 데서 선택하게끔 하면 좋을 거 같네요.
4.emp_deptno : 이 넘은 dept 테이블의 deptno 칼럼과 조인되므로 dept 테이블의 deptno 칼럼 값에서
선택하게 하면 좋겠어요.
5.dept_dname, dept_loc : 여기에 넣는 데이터는 실제 DB에 반영되지 않습니다만, dw 컨트롤 편집화면에는
보여져야 하겠죠? emp_deptno 에 값 넣을 때, 함께 넣으면 될 듯 합니다.


이제 1,2,3 번까지 해결했습니다.


4번과 5번은 한꺼번에 해결할 건데요. 쪼까 까다롭습니다. 일단 무작정 따라하세요.



4.emp_deptno
5.dept_dname, dept_loc



d_emp 의 DataSource 에 들어가보세요.

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

b.dname, b.loc 부분을 삭제합니다.

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

그리고 d_emp 레이아웃으로 돌아오세요.


그럼 팝업창이 하나 뜨는데요.

"SELECT change has forced update specification change."

"DataSource 가 변경되어 Update Properties 에 입력된 내용도 변경됩니다." 라는 뜻입니다.

그리고 확인버튼을 누르면



전에 본 적 있는 팝업창이네요. "Preview 의 내용을 초기화했으므로 다시 조회하세요" 라는 뜻입니다.

Update Properties 창을 열어보세요.


이렇게 되어 있네요.

DataSource 의 쿼리문을 수정하면 Update Properties 내용도 이렇게 변경됩니다.

일단, 그냥 이렇게 두고 닫으세요.














b.dname, b.loc 을 삭제하니 연결되어 있던 dept_dname, dept_loc 칼럼도 삭제됩니다. 당연한 결과겠죠?






다시 DataSource 를 열어 쿼리문을 다음과 같이 수정하고 다시 레이아웃으로 돌아오세요.

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



추가한 칼럼 두 개가 만들어졌는데요. 이전의 칼럼명과 이름이 동일합니다만 의도한 건 아닙니다.
그렇다고 이전 칼럼명의 영향을 받는 건 아닙니다.

Text 오브젝트와 칼럼의 속성을 아래와 같이 수정하세요.




Tab Order 를 클릭합니다.




부서명 칼럼과 부서위치 칼럼에 탭오더가 자동으로 부여 됐네요.



위와 같이 탭오더를 변경합니다. 이제 부서번호 칼럼과 부서위치 칼럼은 편집이 안됩니다.
이게 뭐하는가 싶으시죠? ㅎㅎ


Update Properties 를 엽니다.


위처럼 해 두고 OK~  그리고 d_emp 를 저장하세요.



자~ 이제 새로운 dw 두 개를 만들어 보겠습니다. (8강을 참조하세요)

select dname, deptno
from dept
order by dname


이 쿼리 문을 가지고 dddw_dname 이라는 이름의 Grid 타입 dw 를 만드세요.


select loc, deptno
from dept
order by loc


이 쿼리 문을 가지고 dddw_loc 라는 이름의 Grid 타입 dw 를 만드세요.







이렇게 시스템 트리에 보여야 합니다.









dddw_dname 을 열어보세요




deptno 가 PK(Primary Key) 이므로
deptno 에 따른 dname 이 조회됐다고 볼 수 있습니다.

Tab Order 를 확인해 보세요. 자동으로 부여되어 있을 겁니다. Update Properties 도 확인해 보세요. 알아서 설정이 되어 있을 겁니다.

dw 에서 한개의 테이블만 조회할 경우 Tab Order 와 Update Properties 를 파빌에서 알아서 설정합니다.

그러나 여기서는 불필요합니다. Tab Order 를 모두 0 으로 하고 Update Properties 도 Allow Updates 를 체크 해제 하세요. 이 dw 를 통해서 데이터를 수정하지는 않을 거거든요.

dddw_loc 도 동일하게 하구요.









d_emp 를 엽니다.



dept_dname 칼럼을 선택하고 속성창 - Edit 탭 - Style Type 을 DropDownDW 로 합니다.


그리고.....










Edit 탭의 하단을 보면...













Always Show Arrow 를 체크하세요.











DataWindow 라는 넘이 나옵니다. ???




dw 안의 dw 입니다. 
아까 만들어놓은 dddw_dname 과 연결시켜야 하는데요.

dddw_dname 라고 직접 타이핑하거나 오른편에 있는 브라우저 버튼을 누르면 나오는 대화상자에서 선택합니다.

그럼 다음과 같은 입력칸이 아래에 만들어 집니다.









화살표를 클릭하면 dddw_name 의 칼럼 목록이 나옵니다.




Display Column : dname
Data Column : deptno

이렇게 선택합니다.

그리고 Retrieve 를 다시 하면...


요렇게 됩니다.

Display Column 에 입력된 칼럼값이 보입니다.

그럼 Data Column 은?

Data Column 은 실제 데이터입니다.
dept_dname 은 사실 DataSource 에서 b.deptno 과 연결됩니다.
그래서 dw 컨트롤의 Retrieve 함수를 통해서 조회해 올 때 b.deptno 값을 가져오는데 이 값이 실제 데이터입니다.
이 데이터와 연결된 Display Column 값이 화면에 보이는 거구요. dddw_dname 에서 deptno 와 동일한 로우에 있는 dname 이 화면에 보인다는 뜻입니다.

dw 의 막강한 DropDownDW 기능입니다. ㅎㅎ












Preview 창에서 부서명 칼럼을 클릭해 보세요.







디자인 어울리지 않습니다. dddw_dname 의 디자인이 그대로 보이기 때문입니다.

그럼 어떻게 해야할까요?

dddw_dname 의 디자인을 수정하면 됩니다.









dddw_dname 을 열어보세요.





Header 를 드래그 해서 상단에 밀착하세요.

폰트도 적당히 수정해 주시구요.




















이렇게 해 놓고 저장하고 닫습니다.














d_emp 가 열려 있다면 닫고 다시 엽니다. 그래야 적용이 됩니다.


Preview 창을 보니 어느 정도 모양이 갖춰졌습니다.

Preview 에서 데이터를 편집하고 DB 에도 반영할 수 있습니다. 여기서는 구체적 다루지는 않겠습니다.
만약, 부서명을 Preview 창에서 수정하고 난 다음에 d_emp 를 닫으려고 하면


이런 대화상자가 열립니다.

실제 DB 에 적용하겠냐고 묻네요.

이렇게 Preview 창을 이용해서 데이터를 수정할 수도 있는데요. 많이 사용하는 방법은 아닙니다.

아니요 버튼을 누르세요.





이제 실행해 보세요.

 


dddw_dname 에 의해서 조회된 목록을 보면 맨 아랫 부분에 빈 공간이 있습니다. 빈 공간을 없애볼까요?


다시 d_emp 로 돌아와서 dept_name 의 속성을 보세요.













Allow Editing 은 사용자가 직접 편집하는 것을 가능하게 합니다.

Always Show List 는 항상 목록이 보이게 합니다.

H, V 스크롤바도 만들 수 있습니다.


AutoRetrieve 를 체크해제 하고 실행하면 dddw_dname 이 조회가 안됩니다. 그 결과는 직접 확인해 보시기 바랍니다.


Lines In DropDown 에는 한 번에 보이는 목록의 수를 정할 수 있습니다. 한 20 정도 입력합니다.
여기에 0 을 제외한 값을 입력해야 빈 공간이 없어집니다.









다시 실행해서 확인해 보세요.



빈 공간이 사라졌네요. ㅎㅎ


부서위치 칼럼(dept_loc)도 dddw_loc 를 사용해서 dept_dname 과 동일하게 설정해 보세요.

숙제입니다.


수고하셨습니다.


* 질문은 댓글에...

Posted by A4M
,