Q&A

  • FireBird1.5+IBX에서 트랜잭션 문제
델6, Firebird1.5, IBX로 작업 중인데

네트워크 연결시 deadlock이 걸리길래 이상해서 Transaction을 체크해 보고 있습니다.

if not TIBTransaction_Component.InTransaction then
begin
  ShowMessage('트랜잭션 시작')
  TIBTransaction_Component.StartTransaction;
end
else
   ShowMessage('이미 트랜잭션 중');

try
    //SQL 실행

     if TIBTransaction_Component.InTransaction then
     begin
         TIBTransaction_Component.Commit;
         ShowMessage('Commit Ok!');
     end
     else
         ShowMessage('트랜잭션 상태가 아닙니다.');
except
     TIBTransaction_Component.RollBack;
end;

위처럼 코드가 구성되어 있습니다. 해당 동작을 시키면 분명히
'이미 트랜잭션 중';
이렇게 나오고 난 다음에
'Commit Ok!'
라고 나옵니다.

InTransaction Property를 도움말이나 관련 글에서 찾아보아도 Transaction 상태이면 True 아니면
False를 리턴한다고 했는데 왜 저런 값이 나오는지 모르겠습니다. 저 처리와 병행된 처리사항은 없습니다.

그리고 왜 네트워크로 2대의 PC에서 접속을 할 때 한 쪽에서 프로그램을 실행해서 다른 것은 하지 않고
DB를 접속하고 있는 상태에 있으면 다른 쪽에서 Data를 insert 하거나 update하다가 commit하기 전에
아무 반응을 하지 않습니다. 위의 것과 관련이 있어 보이는데...

이 부분에 대해 아시는 분의 도움을 기다립니다.

다들 새해 복 많이 받으세요!
0  COMMENTS