Programación General > Visual Basic 6.0 e inferiores

 Error En Transaccion Con Visual

(1/2) > >>

Dieguinho.:
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:
Yo lo haria de este modo...


--- Código: Text ---Begin Tran   Insert (codigo,nombre)   select 001         , 'jou'   If @@error <> 0     Begin        If @@trancount >0       Raiserror ('Error ocurrido al momento de llevar acabo la insercion de            datos' ,16,1)      Rollback tran    EndCommit Tran 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:

craliaga:
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

Mollense:

--- Cita de: "Dieguinho." --- alguien sabe que estoy haciendo mal o que no entendi respecto a todo esto??
--- Fin de la cita ---
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 ---ObjTablasIO.EjecutarQRY ("DELETE FROM TABLA1...")ObjTablasIO.EjecutarQRY ("DELETE FROM TABLA2...") 
y lo pases como parámetro a la f(x), de esta forma siempre usarías el mismo.-

 :beer:

Mollense:
En el mismo error tienes otra solución:
--- Citar ---Change the cursor type
--- Fin de la cita ---
No se como se cambiará el tipo de cursor pero claramente es otra solución.-

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa