Buenas,
estoy intentando hacer funcionar una transaccion con 12 sqls para ejecutarlas en mysql pero no veo forma.
¿alguien me puede hechar una mano?
| |||
| Respuesta: transacciones asp y mysql Buenas, La idea es : Tengo 12 sqls, entonces, cabe la posibilidad que alguna vez, en alguna de entre medias surja un error. Lo que quiero es que me haga una transaccion de las 12 sqls y si alguna falla, pues que no guarde los cambios de las otras 11. Hasta ahora lo unico que he conseguido es que ejecute todas menos la que falla, ahh y el control de errores no veo forma que me muestre el el Err.Descripction . No te pego el codigo por que le tengo patas arriba de tantas pruebas, voy a organizarle por que tendré algun fallo tonto. Tienes algun ejemplo a mano? aunque ya he mirado un monton y ninguno me val. ¿tendrá algo que ver el autocommit del mysql? Un saludo |
| ||||
| Respuesta: transacciones asp y mysql Hola En un post anterior ya te dejé una liga. Pero bueno, aquí tienes un ejemplo practico
Código asp:
Ver original Suerte
__________________ Los formularios se envían/validan con un botón Submit <input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" /> |
| |||
| Respuesta: transacciones asp y mysql He probado de las dos formas, como dice Adler y como dice Valery-Net, ejecutando todas las sentencias, pero no va, lo que hace es, ejecuta hasta la que da error, pero no me muestra el error. Vamos que no hace ni caso al rollbacktrans ni al committrans. Voy a volver a hacerlo y os pego el código |
| |||
| Respuesta: transacciones asp y mysql Bueno pues parece que ahora funciona, os pego el código: Lo único es que no me muestra la frase, "FINALIZADO CON ERRORES" y me muestra el error como si no hubiera el control de errores: [MySQL][ODBC 5.1 Driver][mysqld-5.1.30-community]Unknown column 'co_tiend' in 'field list' (el error es provocado para probar) ¿donde tengo el problema?
Código:
'EJECUTA LA TRANSACCION DE LAS SQLs
CON.BeginTrans
con.execute SQLDEL1
con.execute SQLDEL2
CON.EXECUTE SQLC
response.write ("<br>" &time()&"- Tabla Temporal Creada")
CON.EXECUTE SQLL
response.write ("<br>" &time()&"- Fichero Cargado en Tabla Temporal")
CON.EXECUTE SQLN1
CON.EXECUTE SQLN2
CON.EXECUTE SQLN3
response.write ("<br>" &time()&"- Actualizacion de Nulos en TABLATEMPORAL")
CON.EXECUTE SQLF
response.write ("<br>" &time()&"- Creada Tabla para filtrar 'TBLFILTRO'")
CON.EXECUTE SQL2
response.write ("<br>" &time()&"- Insertados datos en 'TBLFILTRO' ")
CON.EXECUTE SQL3
RESPONSE.WRITE ("<BR>" &time()&"- Nuevos Datos Importadas CABECERAS")
CON.EXECUTE SQL4
RESPONSE.WRITE ("<BR>" &time()&"- Nuevos Datos Importadas CABECERAS 2")
CON.EXECUTE SQL5
RESPONSE.WRITE ("<BR>" &time()&"- Nuevos Datos Importadas LINEAS")
CON.EXECUTE SQL6
RESPONSE.WRITE ("<BR>" &time()&"- Nuevos Datos Importados CLIENTES")
CON.EXECUTE SQL7
RESPONSE.WRITE ("<BR>" &time()&"- Nuevos Datos Importados CLIENTES")
CON.EXECUTE SQL8
RESPONSE.WRITE ("<BR>" &time()&"- Actualización de CABECERAS")
CON.execute SQLDEL1
CON.execute SQLDEL2
if Err.number <> 0 Then
Response.Clear
con.RollBackTrans
Err.Clear
response.write ("Finalizado con ERRORES")
Response.End
end if
response.write ("Finalizado OK")
con.CommitTrans
'CERRANDO CONEXIONES
con.close
Set con = nothing
|
| |||
| Respuesta: transacciones asp y mysql Si utilizo ON ERROR RESUME NEXT y ON ERROR GOTO 0 se pasa por el forro lo de con.rollbacktrans y hace el commit directamente usea que el if Err.number <> 0 Then no funciona bien |
| |||
| Respuesta: transacciones asp y mysql Vale, ya he logrado que funcione el control de errores, este es el codigo:
Código:
Lo que pasa ahora es que se pasa por el forro la transaccion y no funciona, no hace caso del con.begintrans ni del rollbacktrans n del commit
On Error Resume Next
CON.BeginTrans
con.execute SQLDEL1
con.execute SQLDEL2
con.execute sql1
con.execute sql2
On Error Goto 0
if Err <> 0 Then
CON.RollBackTrans
Response.Write ("<BR><BR><BR>Error Description: " & err.Description & "...<BR>")
response.write ("<br><br> Finalizado con ERRORES <br><br>")
else
response.write ("<br><br> Finalizado OK <br><br>")
CON.CommitTrans
end if
Simplemente ejecuta todas las SQL menos la que falla Si quito el On error resumen next la transacción funciona perfectamnte ¿que puede pasar? Última edición por ejconan; 31/05/2009 a las 17:51 |
| ||||
| Respuesta: transacciones asp y mysql Hola Un poco de lectura on error goto y on error resume next1 on error goto y on error resume next2 Suerte
__________________ Los formularios se envían/validan con un botón Submit <input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" /> |
| |||
| Respuesta: transacciones asp y mysql Vale, lo que he deducido es que si pongo dentro del on error resume next, varias sql, pues normal que haga todas las que no fallan y esa la deje así. Lo que tengo que hacer , creo, es meter todas las sql en un stored procedure y si falla, falla todo y no sigue. Bueno seguiré probando Gracias Adler Salu2 |