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

 Crocii (Crocii)

추천:  0
파일:     조회:  764
제목:   [RE]ADP 에서 트랜젝션 처리를 하려면?
     
  한가지 더 소개 하겠습니다..
오랜만에 좋은 질문이 올라와서.. ^^;

언바운드 폼을 많이 사용하거나 다른 툴로 개발할 때 ADO를 이용하여 연결하거나 (mdb폼이나 vb, excel, 파워빌더, 델파이 등)
트랜잭션 처리 코드가 많다면 아래처럼 클래스 모듈을 이용하여 Connection 개체의 이벤트를 사용하여 보십시요..

다만.. 어차피 Connection개체는 하나만 만들면 되니까 굳이 클래스 모듈을 사용할 필요는 없고 (언바운드 폼이 많거나 트랜잭션 처리 코드가 많다면 사용할만 하구요..) 폼의 모듈을 사용해도 되겠지요.. 폼 모듈도 클래스 모듈이니까..

일단 몇가지 장치를 해두어야 합니다.. 하기는 번거롭지만 해두면 편리하지요..

Public WithEvents Cnn As ADODB.Connection
Dim flgErrorOccured As Boolean

Private Sub Form_Open(Cancel As Integer)
    IF Cnn Is Nothing then '다른 폼에서 열어 두었을 수도 있으니까..
        Set Cnn = CurrentProject.Connection
    end if
End Sub

Private Sub Form_Close()
    Cnn.Close
    Set Cnn = Nothing
End Sub

Private Sub Cnn_ExecuteComplete(ByVal RecordsAffected As Long _
, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum _
, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset _
, ByVal pConnection As ADODB.Connection)
    If adStatus = adStatusErrorsOccurred Then
        flgErrorOccured = True
    End If
End Sub

Private Sub Cnn_BeginTransComplete(ByVal TransactionLevel As Long _
, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum _
, ByVal pConnection As ADODB.Connection)
    flgErrorOccured = False
End Sub

Private Sub CompleteTrans() '★
    if flgErrorOccured then
        Cnn.RollbackTrans
    Else
        Cnn.CommitTrans
    End if
End Sub
''자.. 이제 예의 트랜잭션 사용 프로시저 입니다..

If MsgBox("현재 등록내용을 확정하여 보내시겠습니까? (이후 수정 불가)", vbYesNo + vbQuestion, "등록내용확정송부") = vbYes Then

Cnn.BeginTrans '★
Cnn.Excute "INSERT INTO dbo.Result_All (Jumpo, Year, Quarter~~~~;
Cnn.Excute "Delete FROM dbo.Result where UserID = '" & myId & "'")
'Cnn.Excute가 몇개가 오든 상관 없습니다..
'위 아래 별표사이의 SQL 중 하나라도 에러가 나면 롤백 됩니다.
CompleteTrans '★

Else
Cancel = True
End If

사용시 코드가 훨씬 간단해 졌습니다..

트랜잭션을 여러군데 사용한다면 편리할 겁니다.. ^^
 
[불량 게시물 신고]  
        
  

작성일 : 2004-10-05(10:03)
최종수정일 : 2004-10-05(10:08)
 


 ◎ 관련글

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