Autor Tema: Manejo de transacciones en VB  (Leído 4657 veces)

0 Usuarios y 1 Visitante están viendo este tema.

PatriciaBB

  • Kilobyte
  • **
  • Mensajes: 51
  • Reputación: +5/-0
    • Ver Perfil
Manejo de transacciones en VB
« en: Julio 19, 2016, 08:01:35 pm »
Chicos…  SoS… estoy tratando de manejar transacciones dentro del manejo de mis actualizaciones de datos, pero me surge la siguiente duda
1.   La transacción la debo de abrir y controlar desde VB
2.   La transacción  la debo de abrir y controlar dentro de un procedimiento almacenado al que le enviaría todos los datos como parámetro
Cuál es la mejor práctica que se debe de aplicar.

Graciassssss....

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Manejo de transacciones en VB
« Respuesta #1 en: Julio 19, 2016, 08:53:44 pm »
1.- Si
2.- No, la invocación y uso del procedimiento almacenado también debe estar dentro de la transacción.

Saludos
Me encuentras en YAcosta.com

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Manejo de transacciones en VB
« Respuesta #2 en: Julio 20, 2016, 11:16:52 am »
Hola, en mi caso, yo las controlo dentro del procedimiento.
Por ej un procedimiento Actualizar Stock, dentro del mismo abro el begin tran, hago lo que tengo que hacer, si salió todo bien... Commit, falló algo Rollback, si hice Rollback dentro del procedimiento genero un RaiseError, para que Vb se entere que hubo error.
Ah ojo, siempre hablando de Ms Sql

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Manejo de transacciones en VB
« Respuesta #3 en: Julio 25, 2016, 01:10:12 pm »
Hola estimado Waldo, no me queda claro si con la palabra "procedimiento" te refieres a un Stored Procedure (procedimiento almacenado) a un Sub de VB6.

En todo caso insisto que el inicio/fin/excepción de una transacción la realizo desde fuera del Stored Procedure, es decir, esas lineas están escritas en el aplicativo que invoca la(s) transaccion(es).

Al margen de si esta bien o no, en mi caso particular y así quisiera no podría meter un commit/rollback dentro de un Stored Procedure, no se como será en los otros motores pero en Firebird no se puede finalizar (commit/rollback) una transacción desde dentro de un Stored Procedure, debe finalizarse desde fuera.

Saludos
Me encuentras en YAcosta.com

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Manejo de transacciones en VB
« Respuesta #4 en: Julio 25, 2016, 02:21:08 pm »
Hola Ivan, me referia a un stored procedure. En Sql server, directamente dentro del sp podes controlar las transacciones. Como siempre debe haber pros y contras. La verdad nunca tuve problemas hasta ahora haciéndolo así.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Manejo de transacciones en VB
« Respuesta #5 en: Julio 25, 2016, 03:46:55 pm »
Ok, tomé nota de esto como una restricción de Firebird.

Saludos
Me encuentras en YAcosta.com

Karman12

  • Bit
  • Mensajes: 1
  • Reputación: +1/-0
    • Ver Perfil
Re:Manejo de transacciones en VB
« Respuesta #6 en: Septiembre 08, 2016, 08:09:46 pm »
Yo realizo el control de las Transacciones de MSSQL desde VB Usando ADODB. Es mucho mas amplio manejar varios SP y al final si encuentras un error realizar el RollBack

Ejemplo sencillo usando una Trans. con ADODB
Código: [Seleccionar]
Dim cn As ADODB.Connection '//Conexion al DB
cn.Open "Provider=SQLOLEDB.1;password = 1234. ;User ID=SA ;Initial Catalog=...."
cn.BeginTrans '-->INICIA LA TRANSACCION

Dim oCmd As New ADODB.Command
Set oCmd.ActiveConnection = cn

oCmd.CommandText = "EXEC SP_PRUEBA @ParamAccion='INSERTAR'; EXEC SP_PRUEBA @ParamAccion='ACTUALIZAR';"
oCmd.CommandType = ADODB.adCmdText
'-->Ejectuando
oCmd.Execute

If cn.Errors.Count = 0 Then '--> Valida si contiene Errores
   cn.CommitTrans '--> Completa la Accion
Else
   cn.RollbackTrans '--> Revierte la Accion
End IF
cn.Close


Luego puedes crear una clase mas completa llamada SQLACCESS o como gustes. Que realiza multiples acciones o tambien para agilizar tiempos, por ejemplo
Código: [Seleccionar]
Dim dba as new SQLACCESS
With dba
.IniciarTrans

.EJecutarQuey("INSERT INTO TABLA(Field) VALUES(1);")
.EJecutarQuey("INSERT INTO TABLA(Field) VALUES(2);")
.EJecutarQuey("INSERT INTO TABLA(Field) VALUES(3);")
.EJecutarQuey("INSERT INTO TABLA(Field) VALUES(4);")
.EJecutarSP("PA_PRUEBA","Param='ACTUALIZAR_SALDO'")

If .ConErrores= True Then
.TerminarTrans= 0 '0=RollBack
Else
.TerminarTrans= 1 '1=Commit
End If

End With

Set dba = Nothing


Saludos  :)


PatriciaBB

  • Kilobyte
  • **
  • Mensajes: 51
  • Reputación: +5/-0
    • Ver Perfil
Re:Manejo de transacciones en VB
« Respuesta #7 en: Septiembre 09, 2016, 05:52:23 pm »
YAcosta, Waldo, Karman12... muchas gracias por vuestro tiempo y por compartir muestra de su código.

Dado que de los tres, dos se inclinan por controlarlo desde el código VB intentare de dicha manera. Ya pronto les comentare mis resultados.

Mil... Gracias  :)

Ya le di sus puntitos...