* Powerbuilder 10.5


지금 사용자 목록화면(w_list)을 계속해서 수정하고 있습니다.

저번 강의에서는 추가 버튼을 눌렀을 때, 목록화면(dw_emp)의 마지막에 로우를 추가하는 것까지 해봤습니다.

로우를 추가는 했는데, 좀 밋밋합니다.

새로운 로우를 추가했을 때, 자동으로 선택반전시켜 보는게 좋겠네요.


새로운 로우를 추가했을 때 -> cb_insert.clicked 이벤트, InsertRow 함수
자동으로 선택반전 -> SelectRow 함수






li_row 라는 int 형의 변수를 선언해서
dw_emp.InsertRow(0) 에서 반환하는 추가된 로우의 넘버를 저장시킵니다.

이전의 선택반전은 해제하고
추가된 로우를 선택반전합니다.




이제 실행해서 확인해 보세요. 뭐...잘 될 겁니다.



옆의 화면은 마지막 중괄호를 생략한 뒤, 저장을 하려고 했을 때 나타나는 화면입니다.
여러분들은 이런 화면을 벌써 경험했을 것 같네요. 솔직히 설명이 좀 늦었습니다. ㅠ.ㅠ 너그러이 ㅎㅎ

대부분의 언어에서는 컴파일 수행시 에러를 잡아주는데요. 파워빌더도 마찬가지입니다.

차이점은 파워빌더에서는 저장하기 전에 먼저 컴파일(compile)을 한다는 것과 컴파일이 되지 않으면 저장이 안된다는 것입니다.

ctrl + L 단축키를 누르면 이 또한 컴파일을 수행합니다. 컴파일만 하고 저장은 안 합니다.

저장을 안하고 컴파일을 통해서 에러를 잡고 싶다면 ctrl + L 하면 됩니다.

여담인데요. 대부분의 편집툴에서 지원하는 단축키도 파워빌더에서 쓸 수 있습니다.

ctrl + A, ctrl + C, ctrl + V 등등....

이거 모르면 빨리 코딩하기가 어렵죠. copy & paste 는 코딩의 기본이니...관련 단축키는 꼭 활용을...





그리고 추가버튼을 눌렀을 때, 추가된 로우로 포커스를 주는 것이 좋겠습니다.










dw 포커스 3종세트를 사용했습니다.
emp_ename 칼럼에 포커스가 가겠죠?
(18강을 참고하세요)





현재, 추가 버튼을 계속 누르면 로우가 계속 추가됩니다. 좀 거시기 하죠?

추가버튼을 눌렀을 때, 가장 마지막 로우의 사원번호가 비어 있으면 새로운 로우를 추가하지 않도록 해 보겠습니다.

가장 마지막 로우의 사원번호 -> RowCount 함수, GetItemNumber 함수
비어있으면 -> IsNull 함수



RowCount method (DataWindows)

설명
  dw 에서 현재의 전체 로우수를 반환합니다.

문법
  long dwcontrol.RowCount ( )

반환값
  dw 의 전체 로우수
  로우가 없으면 0
  에러시 -1




GetItemNumber method (DataWindows)

설명
  dw 에서 숫자형의 데이터를 가져온다.

문법
  numeric dwcontrol.GetItemNumber ( long row, string column )

  row :  가져오려는 데이터의 로우 넘버
  column : 가져오려는 데이터의 칼럼명

반환값
  가져오려는 칼럼의 숫자형 값




IsNull PowerScript function

설명
  변수나 표현식의 값의 null 여부를 알린다.

문법
  IsNull ( any )

  any : 모든 변수나 표현식

반환값
  null 이면 true
  null 이 아니면 false






위 화면에서 방금 추가한 스크립트에 대해서 설명하겠습니다.


int li_rcnt

li_rcnt = dw_emp.RowCount()    // dw_emp 의 전체 로우수를 li_rcnt 에 저장

If li_rcnt > 0 Then  // li_rcnt 가 0일 경우는 제외
 
   int li_empno
 
   li_empno = dw_emp.GetItemNumber(li_rcnt, 'emp_empno')   // 마지막 로우의 emp_empno 값을 가져와 
                                                                                         // li_empno 에 저장
   If IsNull(li_empno) Then  //  li_empno 값이 null 이면
      Return
   End If
 
End If


null 값이란 빈 값을 뜻합니다. 아무런 데이터가 입력되지 않은 값이죠.

dw 에서 로우를 추가하고 아무런 데이터를 입력하지 않았을 때, 각각의 칼럼값들은 자료형에 관계없이 모두 null 입니다.
(단, dw에서 Column Specification 의 Initial value 에 값을 넣어주면 그 값이 초기값이 됩니다. 이 부분에 대해서는 추후에 다룹니다.)


li_empno = dw_emp.GetItemNumber(li_rcnt, 'emp_empno')

첫번째로 추가 버튼을 누를 때, 마지막 로우의 emp_empno 칼럼은 null값이 아니므로 li_empno 값은 반드시 null이 아닙니다. 그리고 새로운 로우가 추가됩니다.

두번째로 추가 버튼을 누를 때, 새로 추가된 로우의 emp_empno 칼럼에서 값을 받아온 li_empno 값은 반드시 null이 되고 새로운 로우는 추가가 되지 않습니다.


If 구문 안에 또 If 구문을 사용했네요. 어떤 종류의 구문안에는 모든 종류의 구문이 포함될 수 있습니다.


수고하셨어요.


* 질문은 댓글에...

Posted by A4M
,