2010-03-25 4 views
2

테이블 업데이트 용 SQL에 대한 다중 호출을 사용하여 SQL 쿼리를 응용 프로그램에 포함 할 때 SQL BEGIN TRANSACTION, COMMIT TRANSACTION, ROLLBACK TRANSACTION을 사용할 수 있습니까?여러 SQL 업데이트에 COMMIT 및 ROLLBACK을 사용하는 Delphi 응용 프로그램

Q.SQL.ADD(<UPDATE A RECORD>); 
Q.ExecSQL; 

Q.Close; 
Q.SQL.Clear; 
Q.SQL.ADD(<Select Some Data>); 
Q.Open; 

일부 변수

Q.Close; 
Q.SQL.Clear; 
Q.SQL.ADD(<UPDATE A RECORD>); 
Q.ExecSQL; 

두 번째 업데이트가 나는 첫 번째 트랜잭션을 롤백하려면 실패 할 경우 내가 뭘하고 싶은 것은 설정 : 예를 들어, 나는 다음과 같은 코드가 있습니다.

BEGIN, COMMIT, ROLLBACK에 고유 한 표기법을 설정하여 커밋되거나 롤백되는 항목을 지정하는 것이 가능합니다.

즉, 첫 번째 업데이트 TRANSACTION_A 를 BEGIN 지정하기 전에 다음 마지막 업데이트 후

난 그 말이 희망 TRANSACTION_A에게 COMMIT 지정합니다. SQL 저장 프로 시저에서이 작업을 수행했다면 프로 시저의 시작과 끝 부분에서이를 지정할 수 있지만로드가 많은 SQL에서 처리 블록과 교착 상태로 인해 코드를 관리 가능한 청크로 분할해야했습니다 섬기는 사람.

+0

안녕하세요, Matt! StackOverflow에 오신 것을 환영합니다. 귀하의 게시물을 편집하여 코드를 강조 표시했습니다. 특수 서식이 필요하므로 제대로 형식이 지정됩니다. 코드 샘플이 포함 된 다른 질문을해야하는 경우 완료되면 코드를 강조 표시하고 1과 0으로 모두 버튼을 누릅니다. :) –

+0

안녕 메이슨 고마워요! :) – Matt

답변

8

Connection에서 StartTransaction, Commit 및 Rollback을 사용하는 것이 더 쉽지 않을까요?

예컨대

Q.Connection.StartTransaction 
try 
    Q.SQL.ADD(); 
    Q.ExecSQL; 

    Q.Close; 
    Q.SQL.Clear; 
    Q.SQL.ADD(); 
    Q.Open; 

    ... 


    Q.Close; 
    Q.SQL.Clear; 
    Q.SQL.ADD(); 
    Q.ExecSQL; 
    Q.Connection.Commit; 
except 
    Q.Connection.Rollback; 
end; 
+0

아, 그게 내가 무엇을 찾고, 그래서 델파이 5를 사용하고 TADOConnection 내가 사용해야 할 것 같아요 : Q.Connection.BeginTrans; Q.Connection.CommitTrans; Q.Connection.RollbackTrans; 감사합니다. – Matt

+0

이 솔루션에는 논리적 인 문제가 있다고 생각합니다. 세 번째 줄의 sql 문이 실패하면 예외가 발생하고 보류중인 트랜잭션이 남아 있습니다. 이것을 피하려면 try 문을 위쪽으로 이동하여 두 번째 줄로 만들어야합니다. –

+0

맞습니다. 업데이트되었습니다. –

관련 문제