Problemas con transacciones

buenos días necesito de tu ayuda trabajo con visual 2008 y access 2007 (mas adelante lo voy a actualizar con sql 2008) por favor estoy con este tema una semana y no encuentro la solución para mi problema te explico al guardar ciertos datos actualizo e ingreso datos a diferentes tablas y para hacer eso quiero utilizar transacciones no encuentro ejemplos para este tema de esta manera ingreso datos y actualizo: en una clase mantenimiento

Public Function insertar(ByVal sql As String) As Boolean
Con.Open()
comando = New OleDb.OleDbCommand(sql, Cn)
Dim i As Integer = comando.ExecuteNonQuery
Cn.Close()
If i > 0 Then
Return True
Else
Return False
End If
End Function

Public Function actualizar(ByVal tablax As String, ByVal campos As String, ByVal condición As String) As Boolean
Con.Open()
Dim sql As String = "update " & tablax & " set " & campos & " where " & condicion
comando = New OleDb.OleDbCommand(sql, Cn)
Dim i As Integer = comando.ExecuteNonQuery
Cn.Close()
If i > 0 Then
Return True
Else
Return False
End If
End Function

esto ingreso en guardar

Private Sub BtGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtGrabar.Click
If MessageBox.Show("ESTA SEGURO DE GRABAR", "CONFIRME", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
Try
Dim campos As String = " consumo= '" & COBRANZAS.DGVvisordepositos.SelectedRows(0).Cells(7).Value & "' , saldo= '" & COBRANZAS.DGVvisordepositos.SelectedRows(0).Cells(8).Value & "'"
'aqui ingreso datos a la tabla depositos
claseobcobranzas2.actualizar("DEPOSITOS", campos, "iddeposito = '" & COBRANZAS.DGVvisordepositos.SelectedRows(0).Cells(0).Value & "'")
For i = 0 To DGVvisorpendientes.Rows.Count - 1
Dim campos2 As String = " estado= '" & DGVvisorpendientes.Rows(i).Cells(5).Value & "' , pendiente= '" & DGVvisorpendientes.Rows(i).Cells(12).Value & "' , totalcobrado= '" & DGVvisorpendientes.Rows(i).Cells(13).Value & "'"
If DGVvisorpendientes.Rows(i).Cells(14).Value > 0 Then
'aqui inserto datos a la tabla detalle depositos para saber que facturas cancelo este deposito
Dim sql As String = "insert into DETALLEDEPOSITOS values ('" & COBRANZAS.DGVvisordepositos.SelectedRows(0).Cells(0).Value & "' , '" & DGVvisorpendientes.Rows(i).Cells(0).Value & "' , '" & DGVvisorpendientes.Rows(i).Cells(14).Value & "')"
claseobcobranzas2.insertar(sql)
'aqui actualizo la tabla facturas los campos estado,pendiente ,cobrado
claseobcobranzas3.actualizar("FACTURAS", campos2, "idfactura = '" & DGVvisorpendientes.Rows(i).Cells(0).Value & "'")
End If
Next
MsgBox("SE GRABO CORRECTAMENTE", MsgBoxStyle.Information, "CONFIRMACION")
Call FILTRAR2()
Call COBRANZAS.FILTRAR()
Me.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If

como vera necesito hacer la tres transacciones si o si .mil gracias

1 respuesta

Respuesta
1

Primero debes crear un objeto OleDbTransaction

Dim tranSQL as new OleDbTransaction

tranSQL.Connection = Con

Luego, en cada uno de tus accesos a la base de datos ...

Debes centralizar o dejar en un 1 solo sitio las 3, 4 o mas operaciones que deseas realizar como una sola transacción.

Si todo resulta bien... entonces haces un TranSQL. Commit, que lo que hace es asegurar todas las operaciones en la base de datos y quedan registradas, si ocurre algún error en alguna de las operaciones dentro de la transacción, lo que se quiere es que se deshagan las que no tuvieron errores, porque la idea es que todas sean correctas, en caso de error en algún punto de la transacción haces un tranSQL. RollBack

Aquí: tienes un ejemplo en mi blog:

http://vbcodigopocketpc.blogspot.com/2009/01/creacin-de-reportes-con-crystal-reports.html

buenas tardes la pagina que me mandas no es de transacciones me puedes mandar la pagina del ejemplos gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas