* Powerbuilder 10.5


저번 시간에 남긴 문제를 해결해야 보겠습니다.

그 문제를 해결하는 방법은 간단합니다. 그러나 다소 어려운 내용을 알고 있어야 이해가 가능합니다.

 







위 이미지는 dw 컨트롤에서의 데이터 편집과 DWBuffer(DataWindow Buffer) 사이의 관계를 정리한 것입니다.

dw 컨트롤 편집 화면이란 사용자에게 보여지고 데이터를 편집할 수 있는 화면입니다.

DWBuffer(DataWindow Buffer) 란 dw 내부적으로 dw 데이터를 편집한(조회, 수정, 삭제, 필터) 종류별로 보관하는 임시 저장소입니다.

1. Retrieve 함수를 호출해서 조회된 데이터는 Primary Buffer 에 저장되고 dw 컨트롤 편집 화면에 보여집니다.

조회된 데이터를 사용자가 수정하게 되면 Primary Buffer에 반영됩니다.
그러나 무조건 반영되는 것이 아니라 데이터 수정 후에 다른 아이템을 클릭하거나 탭키(Tab key) 등을 눌러 커서를 다른 아이템으로 옴겨진 후에야 반영됩니다.

ModifiedCount 함수는 Primary Buffer 에 있는 데이터 중에 수정된 데이터가 있는지 찾습니다.

그러므로 dw 컨트롤 편집 화면에서 수정된 데이터가 Primary Buffer 로 반영 되어야 ModifiedCount 함수가 제 기능을 발휘할 수 있는 것입니다.

2. DeleteRow 함수를 호출하면 Primary Buffer 에 있는 로우의 데이터가 Delete Buffer 로 옴겨집니다.

3. Filter 함수를 호출하면 Primary Buffer 에 있는 로우의 데이터가 Filter Buffer 로 옴겨집니다. Filter 함수에 대해서는 나중에 공부합니다.

Update 함수를 호출하면 dw 의 Update Properties 에 설정해 놓은 정보를 가지고 
Primary Buffer 로부터 insert 문과 update 문을
Delete Buffer 로부터 delete 문을
생성해서 DBMS 로 전달합니다.



무지 무지 중요한 내용이고 dw 를 제대로 사용하려면 꼭 이해해야할 내용입니다.
그러나 처음 접하는 분들에게는 좀 어려운 내용이다보니.... 답답해질 수도 있겠네요

반복적으로 설명할 예정이니 안심하세요. ㅎㅎ


그럼 문제를 해결해 보겠습니다.

dw 컨트롤 편집 화면에서 데이터를 수정하고 다른 아이템을 클릭하거나 커서를 옴기지 않고 바로 저장 버튼을 누를 경우가 반드시 생기므로 저장버튼을 눌렀을 때 dw 컨트롤 편집 화면에서 데이터들를 강제로 Primary Buffer 에 반영시키는 함수를 호출하면 됩니다.


AcceptText method (DataWindows)

설명
  dw 의 Primary Buffer 에 dw 컨트롤 편집 화면의 내용을 반영시킨다.

문법
  integer dwcontrol.AcceptText ()

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




저장 버튼의 clicked 이벤트의 가장 위에

dw_emp.AccepText()

를 추가했습니다.

그럼 dw 컨트롤의 편집 화면의 데이터는 Primary Buffer 에 반영이 되고 수정된 데이터는 ModifiedCount 함수에서 잡아낼 수 있게 됩니다. 정말 간단하죠?

실행해서 확인해 보시죠.


그런데 의문이 하나 생깁니다.

If dw_emp.ModifiedCount( ) + dw_emp.DeletedCount( ) = 0 Then
 
  MessageBox('알림', '수정되거나 삭제된 내용이 없습니다.')
 
  Return
 
End If


이 부분을 쓰지 않고 AcceptText 함수를 호출하지 않은 상태에도 데이터 수정 후 바로 저장 버튼을 누르면 수정된 내용은 바로 DB에 반영이 됩니다 ???  테스트해 보세요.
Primary Buffer 에 반영이 되지 않으면 DB에도 반영이 안되는데 말이죠. 이상합니다.

비밀은 Update 함수에 있습니다.

다음 시간에 설명할께요.

수고하셨습니다.


* 질문은 댓글로 남기세요.


Posted by A4M
,