Foros del Web » Programando para Internet » ASP Clásico »

transacciones asp y mysql

Estas en el tema de transacciones asp y mysql en el foro de ASP Clásico en Foros del Web. Buenas, estoy intentando hacer funcionar una transaccion con 12 sqls para ejecutarlas en mysql pero no veo forma. ¿alguien me puede hechar una mano?...
  #1 (permalink)  
Antiguo 30/05/2009, 19:34
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
transacciones asp y mysql

Buenas,

estoy intentando hacer funcionar una transaccion con 12 sqls para ejecutarlas en mysql pero no veo forma.

¿alguien me puede hechar una mano?
  #2 (permalink)  
Antiguo 31/05/2009, 01:33
Avatar de Esfinge02  
Fecha de Ingreso: septiembre-2008
Ubicación: Cd. Victoria Tam
Mensajes: 162
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: transacciones asp y mysql

e y como es o cual es la idea en si??????.... detalles, detalles
__________________
La ignorancia es una bendición o un privilegio, yo lo siento programadores
  #3 (permalink)  
Antiguo 31/05/2009, 03:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
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
  #4 (permalink)  
Antiguo 31/05/2009, 12:44
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
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
  1. conn.BeginTrans
  2.  
  3. sql1 = "INSERT INTO ficha_vehicular (codfic,vehicu,gralic) VALUES (" & codfic & ","& vehiculo &"," & licencia &")"
  4. conn.Execute(sql1)
  5. if Err.number <> 0 Then
  6. Response.Clear ()
  7. conn.RollBackTrans
  8. Err.Clear ()
  9. Response.End ()
  10. end if
  11.  
  12. sql2 = "INSERT INTO ficha_vivienda (codfic,tipvivi) VALUES (" & codfic & ","& vivienda &")"
  13. conn.Execute(sql2)
  14. if Err.number <> 0 Then
  15. Response.Clear ()
  16. conn.RollBackTrans
  17. Err.Clear ()
  18. Response.End ()
  19. end if
  20.  
  21. conn.CommitTrans


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;" />
  #5 (permalink)  
Antiguo 31/05/2009, 15:21
Avatar de Valery-Net  
Fecha de Ingreso: agosto-2008
Mensajes: 694
Antigüedad: 16 años, 8 meses
Puntos: 12
Respuesta: transacciones asp y mysql

Yo crearía una sola cadena con todas las sentencias e iniciaría un transacción antes de las sentencias y en caso de error llamaría el commit sino el rollback.
  #6 (permalink)  
Antiguo 31/05/2009, 16:41
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
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
  #7 (permalink)  
Antiguo 31/05/2009, 16:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
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
  #8 (permalink)  
Antiguo 31/05/2009, 17:07
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
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
  #9 (permalink)  
Antiguo 31/05/2009, 17:32
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: transacciones asp y mysql

Vale, ya he logrado que funcione el control de errores, este es el codigo:

Código:
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
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
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
  #10 (permalink)  
Antiguo 01/06/2009, 17:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: transacciones asp y mysql

Nadie controla las transacciones? estoy encontrando mucha documentación pero na, todo me falla

Salu2
  #11 (permalink)  
Antiguo 02/06/2009, 07:41
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
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;" />
  #12 (permalink)  
Antiguo 02/06/2009, 16:46
 
Fecha de Ingreso: mayo-2009
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:37.