Programación General > Visual Basic 6.0 e inferiores
Error En Transaccion Con Visual
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
[#] Página Siguiente
Ir a la versión completa