PowerBuilder 10.5
트랜젝션 오브젝트는 DBMS와 연동할 때 필요합니다.
하나의 트랜젝션 오브젝트는 하나의 DBMS세션만 연동할 수 있습니다.
즉, 파빌에서 디폴트로 제공하는 변수인 sqlca는 하나의 세션만 접속가능합니다.
예를 들어, sqlca 로 오라클 scott 계정에 접속하는 어플리케이션이 있습니다.
필요에 따라 오라클의 다른 계정이나 MSSQL의 계정에 접속하고자 한다면?
또 다른 트랜젝션 오브젝트 변수를 만들어 사용하면 됩니다.
이런 개념을 가지고 실습하겠습니다.
pb_study2 워크스페이스를 열고 다음 소스를 생성하십시오.
타겟 : usertns
어플리케이션 오브젝트 : usertns
윈도우 오브젝트 : w_main
usertns 어플리케이션의 오픈이벤트에 다음 스크립트를 작성합니다.
open(w_main)
혹 못 따라오시는 분들은 기초강의1을 다시 보고 오십시오.
실행하면 그냥 비어있는 윈도우 화면이 열립니다.
w_main을 엽니다.
두 개의 커맨드버튼(command button) 컨트롤을 생성합니다.
name : cb_sqlca
text : sqlca
name : cb_usertns
text : usertns
두 개의 스태틱텍스트(statictext) 컨트롤을 생성합니다.
name : st_sqlca
text : (없음)
name : st_usertns
text : (없음)
st_sqlca는 cb_sqlca 밑에 st_usertns는 cb_usertns 밑에 배치합니다.
cb_sqlca 의 clicked 이벤트를 열고 다음 스크립트를 작성합니다.
sqlca.DBMS = "O10 Oracle10g (10.1.0)"
sqlca.LogPass = "tiger"
sqlca.ServerName = "TestDB"
sqlca.LogId = "scott"
sqlca.AutoCommit = False
이 부분은 DB 프로파일에서 가져온 부분입니다.
각자 접속한 DB의 프로파일을 사용하십시오.
select ename
into :ls_ename
from emp
where empno = '7369'
using sqlca;
이 부분은 내장SQL입니다.
접속한 계정이 오라클 scott 계정이고 empno가 7369인 사원의 영문명을 가져옵니다.
각자 알아서 쿼리를 만드세요.
어플리케이션을 실행하고 sqlca 버튼을 클릭하면 st_sqlca에 사원의 영문명이 나타납니다.
여기까지는 기초강의1에서 강의한 부분입니다.
DB 접속 -> 쿼리실행 및 결과 얻기 -> 화면 표시
이제 소스로 돌아와 cb_usertns 의 clicked 이벤트를 열고 다음 스크립트를 작성합니다.
transaction user_tns
트랜젝션 오브젝트 타입의 user_tns라는 로컬변수를 선언합니다.
user_tns = create transaction
트랜젝션 오브젝트의 인스턴스를 생성해 user_tns 에 저장합니다.
(인스턴스 : 오브젝트의 실현치 -> 메모리에 존재하는 상태)
using user_tns;
이것을 생략하면 sqlca를 사용한다는 뜻이 되므로 생략하면 안됩니다.
user_tns 라는 트랜잭션 오브젝트 변수를 생성해서 sqlca와 동일한 오라클 scott 계정에 접속합니다.
user_tns 를 이용해 DB에 접속한 다음 empno가 7521인 사원의 사원명을 표시합니다.
여기서는 동일한 계정으로 실습했지만 다른 계정이나 DB에 접속해도 아무런 문제가 없습니다.
실행 후 usertns 버튼을 클릭하여 확인해 보십시오.
트랜젝션 오브젝트 전역변수 사용
지금까지 로컬변수로 선언해서 사용했는데요.
다른 오브젝트에서도 사용해야 한다면 전역변수로 선언하십시오.
전역변수 선언 뷰에
transaction g_user_tns
를 작성합니다.
전역변수로 사용할 경우 다음 부분은 한번만 호출하면 됩니다. 어플리케이션의 오픈 이벤트에 작성하십시오.
g_user_tns = create transaction
g_user_tns.DBMS = "O10 Oracle10g (10.1.0)"
g_user_tns.LogPass = "tiger"
g_user_tns.ServerName = "TestDB"
g_user_tns.LogId = "scott"
g_user_tns.AutoCommit = False
connect using g_user_tns;
if g_user_tns.sqlcode = -1 then
messagebox('알림', '접속 중 에러가 발생했습니다.' + '~r~n~r~n' + g_user_tns.sqlerrtext)
return
end if
어플리케이션의 close 이벤트에
disconnect using g_user_tns;
를 작성하십시오.
그리고
데이터윈도우(이하 dw) 컨트롤의 함수 중 settransobject가 있습니다.
dw_1.settransobject(sqlca)
dw_1이 sqlca를 사용한다는 뜻인데요.
dw컨트롤이 user_tns 또는 g_user_tns를 사용한다면
dw_1.settransobject(user_tns)
dw_1.settransobject(g_user_tns)
이렇게 작성하면 됩니다.
dw와 dw컨트롤을 만들어 retrieve까지 실습해 보시기 바랍니다.
수고하셨습니다.
'파워빌더 기초강의2' 카테고리의 다른 글
파워빌더(PowerBuilder) 강의2 - 5.User Object : Standard Class (1) | 2017.07.27 |
---|---|
파워빌더(PowerBuilder) 강의2 - 4.User Object : Custom Visual (1) | 2017.07.24 |
파워빌더(PowerBuilder) 강의2 - 3.User Object : Standard Visual (4) | 2017.07.19 |
파워빌더(PowerBuilder) 강의2 - 2.Profile (3) | 2017.07.06 |
파워빌더(PowerBuilder) 강의2 - 시작에 앞서 (6) | 2017.06.29 |