자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi DataSnap에서 트랜잭션 처리를 어떻게 하는지 아시는분~
2016.07.26 20:50
3티어에서
A테이블 인서트 메서드를 한번 호출
B테이블 인서트 메서드 N번 호출할 때
트랜잭션처리를 어디서(Server or Client) 어떻게 하는지 알고 싶습니다.
아시는분이나 자료 추천해주실분~ 감사합니다~
댓글 4
-
관리자
2016.07.27 14:34
-
짧굵
2016.07.27 15:32
답변 감사드립니다~ 죄송한데 아직 잘 이해가 안되서 추가질문 몇가지만 하겠습니다
서버에 startTransaction, proRollBack, proCommit, InsertA, InsertB 이렇게 만들고
클라이언트에서 저장버튼 클릭했을때
startTransaction
if InsertA 성공
for I=0 to 10 begin
if InsertB 실패 then begin
proRoolBack; Exit;
end
end
proCommit;
else proRoolBack; Exit;
대충 이런식으로 클라이언트에서 서버측의 FDConnection의 startTransaction, rollback, commit 을 제어하는 서버루틴을 호출하는건가요?
아니면 서버 루틴 하나만! 호출하여서 startTransaction, InsertA, InsertB, commit, rollback 을 전부 처리한다는 말씀이신가요? 그렇다면
트랜잭션중에 InsertB를 여러번 해야하는데 이런 루틴은 만들 수가 없지 않나요? JSONArray같은거 서버에 던져주고 루틴에서 돌려주면서 하면 될것 같긴 한데 어떻게 하는게 정석인가요?
질문설명을 제대로 해드렸는지 모르겠습니다~
가르쳐주세요~~~~~~~~~~~ 감사합니다~~~~~~~~~~
-
관리자
2016.07.27 16:21
서버에 루틴을 하나 만들고 거기에서 startTransaction, rollback, commit을 하도록 작상합니다. 트랜잭션에서 여러 테이블 여러 레코드는 가능하니 로직으로 작성하시면 됩니다.
-
관리자
2016.07.28 15:50
클라이언트에서는 --> DB 처리에 필요한 데이터만 던집니다.
DataSnap 서버에서는 --> 해당되는 트랜잭션을 포함하여 필요한 DB처리를 수행합니다.
예를 들면, 아래와 같은 내용을 서버에서 처리합니다. 아래 Sample이 있는 도움말 페이지에 더 많은 내용이 있습니다.
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Managing_Transactions_(FireDAC)
[여러 SQL 문장을 Transaction 하나로 묶을 때]
FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL;
....
FDQuery1.ExecSQL;
FDConnection1.Commit;
except
FDConnection1.Rollback;
raise;
end;
[Transaction 여러개를 중첩할 때]
// start new transaction
FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL;
....
// set savepoint
FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL;
....
// release savepoint
FDConnection1.Commit;
except
// rollback to savepoint
FDConnection1.Rollback;
raise;
end;
// commit transaction
FDConnection1.Commit;
except
// rollback transaction
FDConnection1.Rollback;
raise;
end;
[JSON 처리는 아래 도움말에서 시작하여서 관련 도움말등을 찾아서 참고하세요.]
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/RTL.JSONIterator
댓글 수정
Delphi DataSnap에서 트랜잭션 처리를 어떻게 하는지 아시는분~
2016.07.26 20:50
3티어에서
A테이블 인서트 메서드를 한번 호출
B테이블 인서트 메서드 N번 호출할 때
트랜잭션처리를 어디서(Server or Client) 어떻게 하는지 알고 싶습니다.
아시는분이나 자료 추천해주실분~ 감사합니다~
댓글 4
-
관리자
2016.07.27 14:34
-
짧굵
2016.07.27 15:32
답변 감사드립니다~ 죄송한데 아직 잘 이해가 안되서 추가질문 몇가지만 하겠습니다
서버에 startTransaction, proRollBack, proCommit, InsertA, InsertB 이렇게 만들고
클라이언트에서 저장버튼 클릭했을때
startTransaction
if InsertA 성공
for I=0 to 10 begin
if InsertB 실패 then begin
proRoolBack; Exit;
end
end
proCommit;
else proRoolBack; Exit;
대충 이런식으로 클라이언트에서 서버측의 FDConnection의 startTransaction, rollback, commit 을 제어하는 서버루틴을 호출하는건가요?
아니면 서버 루틴 하나만! 호출하여서 startTransaction, InsertA, InsertB, commit, rollback 을 전부 처리한다는 말씀이신가요? 그렇다면
트랜잭션중에 InsertB를 여러번 해야하는데 이런 루틴은 만들 수가 없지 않나요? JSONArray같은거 서버에 던져주고 루틴에서 돌려주면서 하면 될것 같긴 한데 어떻게 하는게 정석인가요?
질문설명을 제대로 해드렸는지 모르겠습니다~
가르쳐주세요~~~~~~~~~~~ 감사합니다~~~~~~~~~~
-
관리자
2016.07.27 16:21
서버에 루틴을 하나 만들고 거기에서 startTransaction, rollback, commit을 하도록 작상합니다. 트랜잭션에서 여러 테이블 여러 레코드는 가능하니 로직으로 작성하시면 됩니다.
-
관리자
2016.07.28 15:50
클라이언트에서는 --> DB 처리에 필요한 데이터만 던집니다.
DataSnap 서버에서는 --> 해당되는 트랜잭션을 포함하여 필요한 DB처리를 수행합니다.예를 들면, 아래와 같은 내용을 서버에서 처리합니다. 아래 Sample이 있는 도움말 페이지에 더 많은 내용이 있습니다.
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Managing_Transactions_(FireDAC)[여러 SQL 문장을 Transaction 하나로 묶을 때]
FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL;
....
FDQuery1.ExecSQL;
FDConnection1.Commit;
except
FDConnection1.Rollback;
raise;
end;
[Transaction 여러개를 중첩할 때]
// start new transaction
FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL;
....
// set savepoint
FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL;
....
// release savepoint
FDConnection1.Commit;
except
// rollback to savepoint
FDConnection1.Rollback;
raise;
end;
// commit transaction
FDConnection1.Commit;
except
// rollback transaction
FDConnection1.Rollback;
raise;
end;
[JSON 처리는 아래 도움말에서 시작하여서 관련 도움말등을 찾아서 참고하세요.]
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/RTL.JSONIterator
댓글 수정
분산처리(3-티어)에서는 트랜잭션 처리는 서버측에서 수행해야합니다. 서버쪽에 트랜잭션을 처리 하는 비지니스 로직(루틴)을 작성하시고 클라이언트에서 호출합니다.