안녕하세요...
지난번에 트랜잭션에 대해 질문을 드렸는데..답변이 없어 이렇게 다시 올립니다.
SocketConnection 을 이용하여 멀티티어 프로그램을 데이터 환경 테스트 중입니다.
App 서버에서 TDatabase 를 이용해서 트랜잭션을 이용하려고 하는데,
클라이언트에서 해당 테이블에 대해서 Applyupdates 만 주면
" A user transaction is already in progress."
요런 메세지만 나옵니다.
질문을 올려도 답변이 없어 Paradox 는 원래 안돼나보다 해서 InterBase 로 바꾸어서
테스트 해보았습니다. 결과는 잘 되더군요.. IB Component 를 이용하니 말이죠..
근데, MSSQL 로 바꾸어 TDatabase 로 테스트를 해 보니 역시나 안되더군요..
이건 Paradox 라서 안돼는게 아니라 TDatabase 로 트랜잭션을 처리하는 부분에서
제가 모르는 비밀이 있는것 같더군요.. ^^;
혹시나 Multi-Tier 로 프로젝트 경험이 있는 분중에서 TDatabase 로 트랜잭션 처리를
해보신 분이 있으시면 답변을 주시기 바랍니다.
제가 코딩해 놓은 소스는
서버쪽에 Transaction 처리메소드 하나 추가하여
procedure TServer.Trans_mod(iMod:Integer);
begin
case iMod of
0 : Database1.StartTransaction;
1 : Database1.Commit;
2 : Database1.Rollback;
end;
end;
이렇게 놓고 클라이언트 쪽에서는 버튼별로
procedure TfTest2.btn_TransctionClick(Sender: TObject);
begin
SocketConn.AppServer.Trans_mod(0);
end;
procedure TfTest2.btn_CommitClick(Sender: TObject);
begin
SocketConn.AppServer.Trans_mod(1);
end;
procedure TfTest2.btn_RollbackClick(Sender: TObject);
begin
SocketConn.AppServer.Trans_mod(2);
end;
procedure TfTest2.btn_ApplyClick(Sender: TObject);
begin
if ClientDataSet1.ChangeCount > 0 then
ClientDataSet1.ApplyUpdates(-1); -----> 요거를 하면
end;
From: Dan Miser (TeamB) (dmiser@execpc.com)
Subject: Re: Bug in MIDAS 3? - 'A user transaction is already in progress.'
Newsgroups: borland.public.delphi.database.multi-tier
View this article only
Date: 2000/01/31
This is a known bug, and the VCL patch is available on the MIDAS Bug Fix
page of my web site.
--
Dan Miser
www.distribucon.com