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 commitOn 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 |