Guest PauloR Posted May 19, 2009 at 07:06 PM Report #265456 Posted May 19, 2009 at 07:06 PM 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
José Lopes Posted May 19, 2009 at 10:30 PM Report #265602 Posted May 19, 2009 at 10:30 PM 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 Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Guest PauloR Posted May 19, 2009 at 10:49 PM Report #265621 Posted May 19, 2009 at 10:49 PM 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
José Lopes Posted May 19, 2009 at 10:53 PM Report #265626 Posted May 19, 2009 at 10:53 PM 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á!!
Guest PauloR Posted May 19, 2009 at 11:19 PM Report #265638 Posted May 19, 2009 at 11:19 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now