Jump to content

VB.NET 2008 + MS Access + Transações


Recommended Posts

Posted

No MS Access eu tenho a possibilidade, usando os Workspaces, de utilizar transacções ( Begintrans, CommitTrans, Rollback)

Existe algum método no VB para conseguir utilizar as transacções?

A situação é a seguinte:

Crio um registo numa tabela e após gravar esse registo necessito de fazer actualizações em mais 3 tabelas.

Caso exista algum erro tenho de repor tudo e eliminar o registo inicial.

Com o Access iniciava o processo com o "BeginTrans" e caso houvesse algum erro fazia o "Rollback", se estivesse tudo bem fazia o "CommitTrans"

Usando as transacções este processo é simples e sem "dores de cabeça" mas não consigo descobrir como fazer em VB.NET.

É possível? Como?

Obrigado

Posted

Penso que responde à tua questão.

Está para VB..ou VBa.. mas é só uma questão de utilizares ps métodos e objectos .NET.

Penso que deve funcionar... pelo menos tens uma ideia.

http://www.macoratti.net/ado_trs.htm

O exemplo do link é para Access / VBA e nesses eu não tenho qualquer tipo de problemas em usar transacções.

De qualquer maneira obrigado  😉

Já encontrei informação para VB.NET, estou a testar e já deixo aqui o código

Cumpts

Posted

pois de facto só repareu melhor depois de responder...

mas da experiencia que tenho que migrei precisamente de vba para .net, com um jeito aqui e ali...as coisas são bastante similares (no que toca a trabalhar com dados) ... a grande diferença que senti mesmo foi falta de fazer um upadte via recordset... mas também se resolve doutro modo...

Qualquer coisa, dispõe

Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Posted

Aqui está e a funcionar

Para testar se o rollback estava a funcionar ou não coloquei um erro no SQL do último UPDATE e funcionou correctamente.

    Private Function fAddUpdAll() As Integer

        Dim iSQLStatus As Integer
        Dim strSQL As String
        Dim Cnn As New OleDbConnection(fCnnString)

        Cnn.Open()
        Dim FullTrans As OleDb.OleDbTransaction = Cnn.BeginTransaction(IsolationLevel.ReadCommitted)

        Try
            strSQL = " INSERT INTO ... "
            Dim Cmd As New OleDb.OleDbCommand(strSQL, Cnn, FullTrans)
            iSQLStatus = Cmd.ExecuteNonQuery()
    ' Testar resultado e fazer ROLLBACK ou continuar

            strSQL = "UPDATE ... "
            Dim Cmd1 As New OleDb.OleDbCommand(strSQL, Cnn, FullTrans)
            iSQLStatus = Cmd1.ExecuteNonQuery()
    ' Testar resultado e fazer ROLLBACK ou continuar

            strSQL = " UPDATE ... "
            Dim Cmd2 As New OleDb.OleDbCommand(strSQL, Cnn, FullTrans)
            iSQLStatus = Cmd2.ExecuteNonQuery()
    ' Testar resultado e fazer ROLLBACK ou continuar

            strSQL = "UPDATE ... "
            Dim Cmd3 As New OleDb.OleDbCommand(strSQL, Cnn, FullTrans)
            iSQLStatus = Cmd3.ExecuteNonQuery()
    ' Testar resultado e fazer ROLLBACK ou continuar

            FullTrans.Commit()
            fAddUpdAll = 1

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, My.Application.Info.Title)
            FullTrans.Rollback()
            fAddUpdAll = 0

        End Try

        Cnn.Close()
        Cnn = Nothing

End Function


cumpts

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.