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까지 실습해 보시기 바랍니다.

 

 

수고하셨습니다.

 

 

 

 

 

Posted by A4M
,