* Powerbuilder 10.5


이번 강의부터는 새로운 로우를 추가한 뒤에 데이터를 넣어 보겠습니다.
수정기능이나 삭제기능보다 작성해야 할 스크립트가 많은 편입니다만 dw 의 진가를 확인 할 수가 있습니다.


새로운 로우를 추가하는 건 InsertRow 함수로 처리했었습니다. 이제 데이터를 넣어야 하는데요.

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 에 값 넣을 때, 함께 넣으면 될 듯 합니다.


22강의 마지막 부분입니다. dw 칼럼명과 데이터를 넣는 방법인데요. 순서대로 구현해 보겠습니다.


1.emp_empno

Primary Key 란 not null 이면서 unique 한 칼럼입니다. 그래서 not null 과 unique 의 조건을 충족시켜야 합니다.

사용자가 임으로 데이터를 넣게 되면 중복된 값을 넣을 가능성이 있겠죠? 그래서 자동으로 값을 입력하는게 좋겠네요.

추가버튼을 누를 때, 자동으로 사원번호 값을 넣어보겠습니다.

추가버튼을 누를 때 -> w_list.cb_insert 의 clicked 이벤트
자동으로 사원번호 값을 넣는다 -> 내장 Select SQL 문SetItem 함수


사원번호 값을 임으로 입력하면 되겠지만, 실전 프로그램에서는 사원번호를 부여하는 규칙이 있습니다.
여기서는 그 규칙을 임으로 만들어 보겠습니다.

emp 테이블의 empno (사원번호) 칼럼값을 조회해 보면

7876 , 7499, 7698, 7782, 7902, 7900, ...

4자리 숫자네요. 가장 큰 값에서 1만 더하면 될 것 같습니다.

emp 테이블의 empno 칼럼값 중 가장 큰 값을 가져와서 1 더한 값을 사원번호로 하겠습니다.

int li_empno_next

Select nvl(max(empno),0) + 1
Into :li_empno_next

From emp
Using SQLCA;


내장 SELECT SQL 문입니다.
a.Select 문으로 조회한 값을 Into 뒤의 변수에 저장합니다.
b.그 변수명 앞에는 콜론(:) 을 반드시 붙여야 합니다.
c.마지막에 Using Transaction Object; 을 사용합니다.
d.
Select 문의 나머지는 연동하는 DBMS 의 문법을 따릅니다.
e.조회된 결과의 갯수가 하나일 때만 사용할 수 있습니다.

위 쿼리문에서 li_empno_next 에는 empno 칼럼의 최대값 + 1 이 저장됩니다.


SetItem method (DataWindows)

설명
  dw 에서 어떤 한 로우의 칼럼에 값을 넣는다

문법
  integer dwcontrol.SetItem ( long row, string column, any value )

  row : 값을 넣으려는 로우 넘버
  column : 값을 넣으려는 칼럼명
  value : 넣고자 하는 값, 칼럼의 자료형과 일치해야 한다.

반환값
  성공시 1, 실패시 -1

이 정도 정보를 가지고 스크립트를 작성해 보겠습니다.

 


코멘트를 적당히 넣어 줬습니다.
좀 보기가 편해졌네요.












 

 

여기부터 입니다.
요걸로 값을 세팅합니다.



 


실행해서 확인해 보세요.

 



추가 버튼을 계속 누르니 위의 화면처럼 되버렸네요.

왜 저렇게 되었는지 생각해 보시구요. 해결책은 다음 강의에 ㅎㅎ


수고하셨어요.


*질문은 댓글에...

Posted by A4M
,