• Viernes 29 de Marzo de 2024, 16:30

Autor Tema:  Error En Transaccion Con Visual  (Leído 1653 veces)

Dieguinho.

  • Miembro MUY activo
  • ***
  • Mensajes: 163
    • Ver Perfil
Error En Transaccion Con Visual
« en: Jueves 18 de Enero de 2007, 19:52 »
0
Buenas, tengo algunas dudas respecto al tema de transacciones, commit, rollback, etc. Espero que alguno me de una mano.

Yo hago esto:

ObjTablasIO.BeginTransaction    
(BeginTransaction lo unico que hace es usar una conexion antes abierta y utilizar el .BeginTrans)            

ObjTablasIO.EjecutarQRY ("DELETE FROM TABLA1...")
ObjTablasIO.EjecutarQRY ("DELETE FROM TABLA2...")


EjecutarQRY hace lo siguiente:

Public Function EjecutarQRY(strSQL As String) As Boolean
       EjecutarQRY = True
       Set lrs = lobjConn.Execute(strSQL, , ADODB.adOpenKeyset)
       If Err Then
            lerror = Err.Description
            EjecutarQRY = False
            Exit Function
       End If
       On Error GoTo 0
       ReDim mCampoOperadorValor(0 To 0)
       EjecutarQRY = True
End Function


Mas abajo hago otras cosas y realizo el commit correspondiente (o rollback si surge algun error)
El problema es que en el segundo query que realizo, cuando quiero borrar la segunda tabla me tira este error:

Transaction cannot have multiple recordsets with this cursor type. Change the cursor type, commit the transaction, or close one of the recordsets.

alguien sabe que estoy haciendo mal o que no entendi respecto a todo esto??

gracias!

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Error En Transaccion Con Visual
« Respuesta #1 en: Jueves 18 de Enero de 2007, 19:58 »
0
Yo lo haria de este modo...

Código: Text
  1. Begin Tran
  2.    Insert (codigo,nombre)
  3.    select 001
  4.          , 'jou'
  5.    If @@error <> 0
  6.      Begin
  7.        If @@trancount >0
  8.        Raiserror ('Error ocurrido al momento de llevar acabo la insercion de            datos' ,16,1)
  9.       Rollback tran
  10.     End
  11. Commit Tran
  12.  
Obviamente es el query que yo utilizaria, vos ya le pones tu standar para enviar el query a la bd y ver si te devuelve un error cosas por el estilo

Cualquier cosa estoy a las ordenes....  :comp:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



craliaga

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Error En Transaccion Con Visual
« Respuesta #2 en: Jueves 18 de Enero de 2007, 21:46 »
0
Hola, yo lo haría de la siguiente manera:
'------------------------------------------------------------------------------
' Procedimiento............: pfEjecutaComando
' Descripción..............: Ejecuta una sentencia SQL
' Autor....................: caliaga
'------------------------------------------------------------------------------
Public Function pfEjecutaComando( _
  ByVal lvStrComando As String) As Boolean
  Dim BolResultado As Boolean
  On Error GoTo pfEjecutaComandoError
  pvLngError = 0
  pvStrError = ""
  cnn.IsolationLevel = adXactReadCommitted
  cnn.BeginTrans
  psGrabaLog clInformacion, cSql, lvStrComando
  cnn.Execute lvStrComando
  psGrabaLog clInformacion, cVB, "Query ejecutado"
  cnn.CommitTrans
  BolResultado = True
  pfEjecutaComando = BolResultado
  On Error GoTo 0
  Exit Function
pfEjecutaComandoError:
  cnn.RollbackTrans
  pvLngError = Err.Number
  pvStrError = Err.Description
  psGrabaLog clError, cSql, "Error: " & pvStrError
  If Not EsCompilado Then
    Debug.Assert pvLngError = 0
    MsgBox "Query: " & lvStrComando & vbCrLf & "Error: " & pvStrError, vbCritical + vbOKOnly, "Atención"
  End If
  Screen.MousePointer = vbDefault
  pfEjecutaComando = False
End Function
Carlos

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Error En Transaccion Con Visual
« Respuesta #3 en: Viernes 19 de Enero de 2007, 01:12 »
0
Cita de: "Dieguinho."
alguien sabe que estoy haciendo mal o que no entendi respecto a todo esto??
Creo que bastaría con cerrar el recordset antes de salir de la función EjecutarQRY ya que estás definiendolo 2 veces (En tu código de ejemplo).-

Otra es que lo definas antes de:
Código: Text
  1. ObjTablasIO.EjecutarQRY ("DELETE FROM TABLA1...")
  2. ObjTablasIO.EjecutarQRY ("DELETE FROM TABLA2...")
  3.  

y lo pases como parámetro a la f(x), de esta forma siempre usarías el mismo.-

 :beer:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Error En Transaccion Con Visual
« Respuesta #4 en: Viernes 19 de Enero de 2007, 01:15 »
0
En el mismo error tienes otra solución:
Citar
Change the cursor type
No se como se cambiará el tipo de cursor pero claramente es otra solución.-
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Error En Transaccion Con Visual
« Respuesta #5 en: Viernes 19 de Enero de 2007, 21:12 »
0
Código: Text
  1.  
  2. ...
  3. Cnn.Open("conectionstring")
  4. Cnn.CursorLocation = adClient
  5. ...
  6.  
  7. if Ejecutar("DELETE FROM tabla1") then
  8.   Msgbox("","Datos eliminados")
  9. end if
  10.  
  11.  

Código: Text
  1.  
  2. Function Ejecutar(sSQL as string) as Boolean
  3.  On Error Goto xError
  4.    Dim sSQL as string
  5.   Dim bTransaccionActiva as Boolean,bExito as Boolean
  6.  
  7.   bTransaccionActiva=False
  8.   bExito=False
  9.  
  10.   With Cnn
  11.     bTransaccionActiva=.BeginTrans >0
  12.            .Execute(sSQL)
  13.            .CommitTrans
  14.             bTransaccionActiva=False
  15.             bExito=True
  16.   End If
  17.  
  18. xError:
  19.   if bTransaccionActiva then
  20.       Cnn.RollBack  
  21.   end if
  22.  
  23.   if Err.Number>0 then
  24.     MsgBox (Err.Number,Err.Description)  
  25.   end if  
  26.  
  27.   Ejecutar=bExito
  28. End Function
  29.  
  30.  

asi le hago yo no lo compile poque aqui no tengo VB :P pero ahi esta la idea puede haber errores de sintaxis porque tengo tiempo que no uso VB y pues como no lo pude probar :P


Saludos Espero ayude
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================