나눔터  
  HOME > 나눔터 > 묻고답하기 > 액세스
액세스
액세스에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 Crocii (Crocii)

추천:  0
파일:     조회:  731
제목:   [RE]ADP 에서 트랜젝션 처리를 하려면?
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

1. 액세스 버전(95,97,2000,2002): 2000
2. 윈도우즈의 버전(win95,win98,winME,winNT,win2000,winXP): 2000
3. CPU (486,PentiumI/II/III/IV...):
4. RAM (32,64,128,256,512MB,1G...): 

* 아래줄에 질문을 작성하세요 >> 
ADP 파일을 생성하여 폼 명령버튼에 다음과 같이 코딩을 하였습니다.

    If MsgBox("현재 등록내용을 확정하여 보내시겠습니까? (이후 수정 불가)", vbYesNo + vbQuestion, "등록내용확정송부") = vbYes Then
        DoCmd.RunSQL ("INSERT INTO dbo.Result_All (Jumpo, Year, Quarter, Code_T, Code_M, Jumsu, UserID, Center, Opinion) SELECT Jumpo, Year, Quarter, Code_T, Code_M, Jumsu, UserID, Center, Opinion FROM dbo.Result where UserID = '" & myId & "'")
        DoCmd.RunSQL ("Delete FROM dbo.Result where UserID = '" & myId & "'")
    Else
        Cancel = True
    End If

간단히 말씀드리면 
첫번째 SQL 문장에서는 Insert 처리를 하고
두번째 SQL 문장에서는 위 Insert 한 부분을 Delete 하는데
첫번째 문장에 에라가 있을 경우에도 메세지 출력후
두번째 문장을 그대로 처리합니다.

SQL Server에서의 Begin Tran ~~~~~ Commit 문 처럼
이 두 SQL 문을 트랜젝션 처리할 수 있는 방법이
VBA 코딩에서 있는지 궁금합니다.
즉 첫번째 문장과 두번째 문장중 어느 한 문장에도 에라가
있으면 모든 SQL 문이 실행되면 안됩니다.

고수님의 고견 부탁드립니다.

PS : Crocii 님 여러 도움에 참으로 감사드립니다.  간단한 인적사항이나
     알고 싶군요!


==============[에밀님 글에 대한 답변입니다]==============
안녕하세요 에밀님~ ^^
드디어..!! 이곳에.. 트랜잭션에 관한 질문이 올라왔군요..
반갑습니다..

물론 트랜잭션 처리가 가능합니다..

한가지.. 사족으로..
많은 분들이 모르시거나 잘못 알고 계신것이 있는데.. mdb, 즉 액세스 DB도 트랜잭션 처리가 됩니다. DAO를 이용하여 가능하지요. 단 서버형DB와 같이 트랜잭션이 자동으로 발생하게 할 수는 없고 트랜잭션 시작을 선언해 주어야 합니다. 데스트탑DB이니까요..
즉, 바운드폼에서는 안되고 언바운드폼에서 DAO를 이용하여 액세스할 때 가능합니다. 게다가.. 다중 트랜잭션을 지원합니다..!! 메모리 부담이 커지겠지만.. 각설하고.. ^^;

ADP는 기본적으로 ADO로 연결합.. 할 겁니다.. (맞을 겁니다.)

코드를 보니 언바운드 폼이로군요..

ADO는 다중 트랜잭션을 지원하지 않습니다.. (아마도..)
때문에 아래와 같이 코딩해야 합니다.

dim Cnn as Connection
on error resume next
set Cnn=currentproject.connection
    If MsgBox("현재 등록내용을 확정하여 보내시겠습니까? (이후 수정 불가)", vbYesNo + vbQuestion, "등록내용확정송부") = vbYes Then
Cnn.BeginTrans '★
        DoCmd.RunSQL ("INSERT INTO dbo.Result_All (Jumpo, Year, Quarter, Code_T, Code_M, Jumsu, UserID, Center, Opinion) SELECT Jumpo, Year, Quarter, Code_T, Code_M, Jumsu, UserID, Center, Opinion FROM dbo.Result where UserID = '" & myId & "'")
'docmd.runsql 는.. 서버에서 보낸 에러코드를 반환할지.. 잘 모르겠습니다.. 아마 되리라고 생각합니다만.. 에러코드가 반환되지 않으면 아래처럼 Connection개체의 Excute메서드를 이용해 SQL을 날리십시요.
'Cnn.Excute "Insert Into dbo.Result_All ~"
if cnn.errors.count>0 then '★
cnn.rollbacktrans '★
else
        DoCmd.RunSQL ("Delete FROM dbo.Result where UserID = '" & myId & "'")
'역시 에러코드가 반환되지 않으면 Excute메서드를 사용하십시요.
  if cnn.errors.count>0 then '★
    cnn.rollbacktrans '★
  else
    cnn.commitTrans '★
  end if
end if
Else
        Cancel = True
    End If
 
[불량 게시물 신고]  
에밀정성어린 답변에 감사드립니다.
2년전에 아마존에서 Paul Litwin 이 쓴
Access 2002 Developer's Handbook(거의 Access의 바이블로 통하는 책, 1천5백쪽)에 단 몇줄만 나와 있는데 
Crocii님의 설명이 더 명쾌한것 같습니다.
Cyber에서의 인연이지만
앞으로 좋은 추억으로 남았으면 좋겠습니다.
좋은 활동 계속 부탁드립니다.
정말 감사드립니다.
10-04 (18:20)
삭제 ■신고
Crocii감사합니다.. ^^
그러고 보니 깜빡.. 인적사항을 잊었군요..

오튜에서 만난분들과 가끔 모임을 갖고 있습니다..
한동안 뜸했지만..

조만간 자리가 다시 생길겁니다.. 분명..
그때 에밀님도 오셔서 뵈었으면 좋겠습니다..
오튜카페에 종종 들르셔야 합니다.. 
어느분의 기분에 따라 불시에 모임이 결정되기 때문에.. ^^
10-04 (19:43)
삭제 ■신고
        
  

작성일 : 2004-10-04(15:31)
최종수정일 : 2004-10-04(17:33)
 


 ◎ 관련글

  제 목   작성자   날짜
ADP 에서 트랜젝션 처리를 하려면? 에밀 2004-10-04
[RE]ADP 에서 트랜젝션 처리를 하려면? Crocii 2004-10-04
[RE]ADP 에서 트랜젝션 처리를 하려면? Crocii 2004-10-05