![]() |
Problema con Try Except
Hola amigos de nuevo aquí con mis dudas pidiendo ayuda.
Resulta que en un bucle Try Except realizo varios post, pero el problema es que cuando falla algun post, resulta que los anteriores ya se han grabado en la BD. Mi pregunta es ¿en el bucle try, si falla algo, todo vuelve a su estado anterior? Uso Delphi 5 y tablas paradox. el código es el siguiente:
Muchas gracias por vuestra ayuda. |
En un bucle Try .. Except, si se produce un error o excepción, el programa salta desde la línea que en ese momento se encuentre en ejecución, y en la cual se produzca el error, a la siguiente línea que aparezca después del Except.
Eso no significa para nada que las líneas anteriores no se hayan ejecutado y por lo tanto, si realizas Post estos sigan vigentes. Si lo que quieres es cancelar los Post realizados, deberás pensar en la transacción asociada y realizar un RollBack según corresponda. ;) |
Gracias gluglu por tu rapida respuesta, pero podrías orientarme un poco acerca de la transaccion asociada y del rollback que me comentas.
Gracias de nuevo. |
El tema de las transacciones es un tema que no es inmediato y que lamento no poder reducirte a unas cuantas líneas en un hilo.
Te recomiendo empieces por este documento de un compañero del Club, y además en este hilo se habla sobre todo del tema y encontrarás otros varios enlaces adicionales. En cualquier caso, y perdona que te remita a ella, encontrarás inmensa cantidad de ayuda en la búsqueda del foro respecto al tema de transacciones, así como acerca del RollBack. ;) |
Muchas gracias gluglu, mirare lo que me has dicho, y si tengo alguna duda pondre otro hilo.
Gracias de nuevo. |
muy buena explicacion gluglu, pero un pequeño detalle, en el caso que nos plantea el compañero se trata de tablas Paradox por lo que el asunto de las transacciones le queda grande.
En los componentes BDE se puede utilizar algo llamado cacheupdate, en ese caso las lineas antes del except deberian ser el applyupdate de cada tabla, y en el caso del except el cancelupdate Espero te sirva y cualquier cosa preguntas, la ayuda de Delphi plantea muy bien ese punto. |
Hola Espartaco, te pongo un ejemplo, con BDE y ADO.
Saluditos |
Efectivamente eduarcol, he mirado el link de gluglu pero es para firebird.
Al ejemplo de caro me surgen algunas dudas: - Para utilizar este codigo imagino que no tengo que añadir ninguna libreria. - Tengo que insertar en el form algun componente? - y por ultimo, donde pones Cita:
Muchas gracias a todos por vuestra ayuda.:) |
Sí, puedes poner todas las operaciones que necesites siempre que formen "un conjunto lógico".
No pongas más de lo que necesites porque cuanto mayor sea la transacción más lento se vuelve el rollback en caso de fallo y más espacio se necesita para éste. |
Antes que nada perdon por tardar en probar las transacciones, pero el trabajo manda, y dar las gracias por vuestra ayuda.
He probado las transacciones como pone Caro, pero tengo un problema, que seguramente sera porque es la primera vez que utilizo esto y algo se me habra pasado. El caso es que me da un error Cita:
He insertado en el form un componente Database y en la propiedad DatabaseName he puesto el nombre del alias de la base de datos que utilizo. Antes de esto ya tenia insertados los componentes TTable y TDataSource correspondientes, a estos componentes no les he tocado despues de insertar el componente Database. No se si me he explicado, creo que si. Gracias de nuevo. |
Solo para que se refresque el post en la lista y no se pierda, pues necesito la ayuda, espero me contesteis pronto.
Muchas gracias. |
Me respondo yo.
El error era que no ponia la propiedad TransIsolation del DataBase en Dirty Read, que es obligatorio para bases de datos locales. Gracias a todos por vuestra ayuda. |
La franja horaria es GMT +2. Ahora son las 13:24:21. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi