델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하기 전에
아무 반응을 하지 않습니다. 위의 것과 관련이 있어 보이는데...
이 부분에 대해 아시는 분의 도움을 기다립니다.
다들 새해 복 많이 받으세요!