• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PauloR

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

5 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora