복붙노트

[SQL] 우리는 MS-Access에서 거래를해야합니까?

SQL

우리는 MS-Access에서 거래를해야합니까?

나는 C # .NET 및 MS-액세스를 사용하여 소형 데스크탑 응용 프로그램을 개발하고있다. 나는 MS-액세스의 사전 경험이 없습니다. 나는 우리가 MS-Access에서 여부 트랜잭션을 사용할 수 있는지 알고 싶습니다.

나는 아래에 언급 된 상황이있다.

나는 TBL1에 삽입이 성공하는 경우에만 TBL2에 삽입 할. TBL2에 삽입하는 동안 몇 가지 예외가 있다면, 나는 TBL1에 삽입을 롤백합니다. 나는이 쉽게 SQL 서버에서 얻을 수 알고 있지만, MS 액세스의 경우,이를 어떻게 관리해야한다. 제발 도움말, 미리 감사드립니다.

해결법

  1. ==============================

    1.우리가 할 것 같습니다 : MSDN - TRANSACTION 문 (Microsoft Access에서 SQL)

    우리가 할 것 같습니다 : MSDN - TRANSACTION 문 (Microsoft Access에서 SQL)

    트랜잭션이 자동으로 시작되지 않습니다. 트랜잭션을 시작하려면 사용하므로 명시 적으로 수행해야합니다 :

    BEGIN TRANSACTION
    

    트랜잭션 동안 수행 된 모든 작업을 커밋하여 트랜잭션을 마무리한다 :

    COMMIT [TRANSACTION | WORK]
    

    트랜잭션 동안 수행 한 모든 작업을 롤백하여 트랜잭션을 마무리한다 :

    ROLLBACK [TRANSACTION | WORK]
    
  2. ==============================

    2.아무도 실제로이 질문에 당신이 여기있는 코드 예제를 제공하거나 심지어 예를 인용하고있다 (파일이 수행 액세스 도움 불구하고, 예제를 포함합니다). 명심해야 할 중요한 문제는 제트 / ACE에서 (액세스 거래 자체를 지원하지 않습니다 - 당신이 그것을 위해 사용하는 어떤 데이터베이스 엔진에 따라 다름)이다 트랜잭션이 작업 공간 레벨에서 제어된다. 당신은 당신의 거래를위한 새로운 작업 공간을 만들거나 새로 만들 수 있습니다. 여기에 몇 가지 예제 코드는 다음과 같습니다

    아무도 실제로이 질문에 당신이 여기있는 코드 예제를 제공하거나 심지어 예를 인용하고있다 (파일이 수행 액세스 도움 불구하고, 예제를 포함합니다). 명심해야 할 중요한 문제는 제트 / ACE에서 (액세스 거래 자체를 지원하지 않습니다 - 당신이 그것을 위해 사용하는 어떤 데이터베이스 엔진에 따라 다름)이다 트랜잭션이 작업 공간 레벨에서 제어된다. 당신은 당신의 거래를위한 새로운 작업 공간을 만들거나 새로 만들 수 있습니다. 여기에 몇 가지 예제 코드는 다음과 같습니다

      On Error GoTo errHandler
        Dim wrk As DAO.Workspace
        Dim db As DAO.Database
        Dim lngInvoiceID As Long
    
        Set wrk = DBEngine.Workspaces(0)
        Set db = wrk.OpenDatabase(CurrentDb.Name)
        With wrk
          .BeginTrans
          db.Execute "INSERT INTO tblInvoice (CustomerID) VALUES (123);", dbFailOnError
          lngInvoiceID = db.OpenRecordset("SELECT @@IDENTITY")(0)
          db.Execute "INSERT INTO tblInvoiceDetail (InvoiceID) VALUES (" & lngInvoiceID & ")", dbFailOnError
          .CommitTrans
          Debug.Print "Inserted Invoice header and detail for Invoice " & lngInvoiceID
        End With
    
      exitRoutine:
        If Not (db Is Nothing) Then
           db.Close
           Set db = Nothing
        End If
        Set wrk = Nothing
        Exit Sub
    
      errHandler:
        MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in transaction"
        wrk.Rollback
        Resume exitRoutine
    

    (코드는 테스트 및 액세스 내에서 작업)

  3. ==============================

    3.예 Microsoft Access에서 거래를 지원하고 아주 잘 작동합니다. 나는 몇 년 전에 내 데이터베이스로 Access를 사용하여 상용 POS 응용 프로그램을 구축하고, 트랜잭션 지원은 매우 잘했다.

    예 Microsoft Access에서 거래를 지원하고 아주 잘 작동합니다. 나는 몇 년 전에 내 데이터베이스로 Access를 사용하여 상용 POS 응용 프로그램을 구축하고, 트랜잭션 지원은 매우 잘했다.

    가능하면 그럼에도 불구하고, 나는 SQL Server Express를 사용합니다. 무료 훨씬 더 강력한 액세스 이상입니다.

  4. from https://stackoverflow.com/questions/2078432/do-we-have-transactions-in-ms-access by cc-by-sa and MIT license