* Powerbuilder 10.5


pb 가 dw 의 데이터를 가지고 DBMS 에 전달할 쿼리를 생성하는 원리에 대해 알아보겠습니다.


DWItemStatus DataWindow constant

: DB 상에 어떻게 업데이트될 것인가를 정하는 값으로 dw 아이템의 상태를 열거형으로 표시합니다.

1. NotModified!
2. DataModified!
3. New!
4. NewModified!


이 값들이 dw 아이템의 로우와 칼럼에 각각 적용되는데요.

이렇게 적용되어 표시되는 Flag 를 Update Flag 또는 Status Flag 라고 합니다.

로우 플래그와 칼럼 플래그가 있는데요.

로우 플래그는 로우에 속하는 칼럼 하나라도 수정되었을 때 변경됩니다.

로우 플래그에는 위 1~4 번 모두 해당되구요. 칼럼 플래그에는 1,2 번만 해당됩니다.



다음은 Retrieve 함수를 호출한 직후의 플래그입니다.

 



아이템마다 표시된 플래그가 칼럼 플래그이고 가장 오른쪽에 있는 플래그는 로우 플래그입니다.

모두 NotModified! 라고 되어 있네요. 조회된 후 수정된 적이 없다는 뜻이죠.




다음은 2로우사원명수정했을 때의 플래그입니다.


2번 로우의 사원명 칼럼은 DataModified! 라고 변했고 로우 플래그도 DataModified! 라고 변했습니다.

어떤 로우의 칼럼이 수정되면 해당 로우 플래그도 변경됩니다.

이 때 2번 로우의 다른 칼럼이 수정되어도 그대로 DataModified! 로 남아 있습니다.

칼럼이 수정된다는 것은 편집화면에서 아이템을 직접 수정하거나 SetItem 함수를 호출해서 아이템을 바꾸는

경우를 뜻합니다.


만약, 2번 로우의 사원명이 'ALLEN' 인데 'ALLENY' 라고 수정 후에 다시 'ALLEN' 으로 원상 복구 시키면 어떻게 될까요?

원상 복구하고는 상관없이 로우 플래그와 칼럼 플래그 모두 DataModified! 라고 남아 있습니다.

데이터 자체를 체크하지 않고 수정되었다는 것만 체크하는 것 같습니다.

이럴 경우 데이터 자체를 체크해서 플래그를 수정하고 싶다면 SetItemStatus 라는 함수를 쓰면 됩니다.

SetItemStatus 함수를 이용해서 개발자가 직접 플래그를 변경할 수도 있습니다. 사용방법은 난중에.... ㅎㅎ

파빌에서는 Update 함수를 호출시에 DBMS 에 전달할 쿼리를 만드는데요.

여기서 중요한 건 로우 플래그가 DataModified! 라고 되어 있으면 Update 문을 생성한다는 것입니다




다음은 InsertRow 함수를 호출해서 마지막 로우 다음에 새로운 로우를 추가한 경우입니다.

 



주목할 점은 로우 플래그가 New! 라고 되어 있다는 것입니다.

이 때, Update 함수 호출하면? 

이 로우에 대해서는 쿼리문을 생성할 수 없습니다.

쿼리를 만들 재료가 없으니 살포시 무시해 버립니다.




다음은 새로 추가된 로우(4번째 로우)의 직급 칼럼을 수정한 경우입니다.


로우 플래그가 NewModified! 라고 되어 있네요. 이 로우로부터는 Insert 문을 생성하게 됩니다.





위의 내용은 Primary 버퍼와 Filter 버퍼에 해당하는 내용입니다.

Filter 함수를 쓰면 Filter 버퍼로 옴겨지는데, 위에서 얘기한 상태정보도 그대로 옴겨집니다.

아이템이 수정된 후에 Filter 버퍼로 옴겨졌다 하더라도 Update 함수를 호출하면 DB에 반영이 됩니다.

Delete 버퍼로는 Delete 문을 만들기 때문에 위의 정보가 쓰이지는 않습니다.


Update 문, Insert 문은 Primary 버퍼의 아이템 상태 정보와 Update Properties.. 에서 설정된 정보를

Delete 문은 Delete 버퍼의 정보와 Update Properties.. 에서 설정된 정보를 가지고

Update 함수 호출시에 적합한 쿼리문을 만들어서 DBMS 에 전달합니다.


사용자에게는 보이지 않지만 pb는 내부적으로 이렇게 dw 아이템을 관리하고 있습니다.

사용자는 GetItemStatus 함수를 호출하여 상태 정보를 받아 올 수 있고 SetItemStatus 함수를 호출하여 상태 정보를

변경할 수도 있습니다. 다음 시간에는 GetItemStatus 함수에 대해서 알아보겠습니다.

수고하셨습니다.

Posted by A4M
,