트랜잭션 (BeginTrans/CommitTrans/Rollback) 사용 후 MS-Access 2010 환경이 불안정한 것 같습니다. 불안정한 말은 MS-Access 환경이 더 이상 객체 수정을 허용하지 않는다는 것입니다 (자동으로 일종의 독점 모드로 변경됨). 프로세스의 SQL 쿼리를 실행하는 동안 예기치 않은 오류 메시지가 표시됩니다.MS Access 2010 : 양식에 트랜잭션 관리 추가
상황 :
는 나는 새 VBA 모듈을 추가 한 MS-액세스 2010 데이터베이스 (accdb
형식)이있다. 이 모듈은 레코드를 데이터베이스의 테이블에로드하기 위해 주어진 파일을 처리합니다. 나는이 DB (별도의 응용 프로그램 아님)로 작업하기 위해 MS-Access 2010 환경을 사용합니다.
각 레코드에 대해 db에 저장되기 전에 몇 가지 검증이 이루어졌습니다. 오류가 감지되면 모든 처리가 취소됩니다. 트랜잭션을 사용하여 전체 파일이 정상적으로로드되었는지 확인합니다.
문제 :
나는 그것이 정확하고 그래서 COMMIT으로 완료이 과정을 처음 실행할 때이 프로세스가 자신의 처리 결과를 상관하지 않고 다른 파일을 다시 실행 할 수 있습니다. 각 처리의 결과는 파일의 데이터 품질에만 의존합니다.
그러나이 프로세스를 처음 실행하면 ROLLBACK으로 끝나고 프로세스의 모든 다음 실행은 프로세스에서 SQL 쿼리를 실행하는 동안 오류로 끝납니다.
MS-Access 환경은 일종의 단독 모드로 바뀝니다.
질문 :
가 VBA 모듈의 종류 또는 MS-액세스 2010 개발 환경 준수 처리인가? 또는 내 Access 데이터베이스에 연결하여 파일 처리를 실행하는 새로운 별도의 응용 프로그램을 빌드해야합니다.
코드 (간체) :
Private Sub Comando0_Click() 'A success processing simulation
On Error GoTo ErrManagenent
BeginTrans
'Some procesing finishin OK
ProcessWithoutError
CommitTrans
Exit Sub
ErrManagenent:
Debug.Print "Comando0_Click Error: " & Err.Description & "." & vbCrLf & Err.Source
Rollback
End Sub
Private Sub Comando6_Click() 'A fail processing simulation.
On Error GoTo ErrManagenent
BeginTrans
'Some procesing finishin with a Err.Raise
ProcessWithError
Exit Sub
ErrManagenent:
Debug.Print "Comando6_Click Error: " & Err.Description & "." & vbCrLf & Err.Source
Rollback
End Sub
Private Sub ProcessWithError() 'simulation of a process ending with error
Dim rs As Recordset
Dim strSql As String
'Any DB query.
strSql = "SELECT * FROM 00_Bancos"
Set rs = CurrentDb.OpenRecordset(strSql)
Debug.Print rs.RecordCount
'some processing with
'......
'let's suppose there is an error while processing
rs.Close
Err.Raise 11, , "MY error mesage"
End Sub
Private Sub ProcessWithoutError() 'Simulation of a process ending OK
Dim rs As Recordset
Dim strSql As String
'Any DB query.
strSql = "SELECT * FROM 00_Bancos"
Set rs = CurrentDb.OpenRecordset(strSql)
Debug.Print rs.RecordCount
'some processing
'......
'let's suppose the process finishes OK.
rs.Close
End Sub
팁 주셔서 감사합니다. Krish. – Juanfran
@ Juanfran 당신은 대답으로 표시 할 수 있으므로 다른 사람들에게 도움이 될 것입니다. –
팁 주셔서 감사합니다. Krish. 샘플 코드를 읽은 후 "DBEngine"을 참조하기 위해 코드가 생략되었음을 알았습니다. BeginTrans, CommitTrans 또는 Rollback 메서드 호출 전에. 이제 모든 것이 잘됩니다. – Juanfran