![]() |
Transacciones
Hola!
Estoy realizando un proyecto de estudios en Delphi, y tengo una duda sobre transacciones con componentes dbExpress conectado a BBDD Interbase. La pregunta es: Si realizo la siguiente secuencia: Código:
Por otra parte (sé que es otra pregunta, aunque creo que estrechamente relacionada con la cuestión anterior), hágase el Commit o el Rollback (o todo o nada), el trigger és activado y el generador automáticamente incrementado. Si realizo una transacción, deseo explícitamente un Todo o Nada. Si esta no se lleva a cabo, no deseo que se incremente el generador, pues la inserción no ha sido efectiva y, por lo tanto, me rompe la secuencia de los anteriores registros insertados en la tabla maestro. ¿Hay alguna forma de solucionar esto? Gracias de antemano por vuestro interés. ;) |
si, puedes retrasar el contador, perooooo no es nada aconsejable, lo mejor es que NO te preocupes por la secuencia, si necesitas un número consecutivo y sin huecos (ej: Nº de factura) NO uses el campo clave para estos menesteres. De hecho no tendrias ni que enseñarselo al usuario.
¿porque? por el campo de identificación del registro (lease código) y el número de factura/albarán/recibo son cosas distintas, de hecho puedes tener Dos facturas con el número 56 (Serie A y serie B de facturación, conozco empresas que tienen 10 letras de facturación distintas) |
Posible Solución? (a medias)
Hola!
La verdad es que no se otra forma mejor de ir generando una secuencia (efectivamente, se trata de un programa de facturación), y más si este programa se da el caso de que trabajen varias copias al unísono en red... desde luego, no es nada aconsejable ir efectuando retrasos en el contador, si se da este caso desde uno de los clientes. No obstante (por si puede servir de algo), investigando he encontrado una forma interesante de generar la secuencia, y al mismo tiempo saber el ID generado. Se trata de, en vez de confiar esta operación a un trigger, incrementar el generador desde el programa cliente insertando un SQLQuery con la siguiente sentencia SQL: Código:
SELECT GEN_ID(Generator, Incremento) FROM RDB$DATABASE No te soluciona el problema de que si hay errores en la inclusión seguirá siendo efectivo el incremento, pero menos es nada... Sólo se me ocurre que antes del mismo, asegurarse mediante código, si es necesario, de que la inserción se va a realizar sin ningún problema. Si alguien conoce alguna forma mejor, le agradecería su consejo. Un Saludo :cool: |
La franja horaria es GMT +2. Ahora son las 21:30:51. |
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