![]() |
Trigger se dispara sin Commit
Hola,
Estoy usando D7, FB2 y IBExpert. Tengo un Generador para autoincrementar un campo, todo esto lo hice mediante IBExpert, el cual crea el generador y el trigger. Bueno, el asunto es que cuando aplico un sentencia para insertar cualquier cosa y doy Rollback para cancelar la operacion, el generador ya ha incrementado su valor :confused:. Esto me resulta confuso, pues si aun no he hecho el Commit correspondiente para que aplique los cambios al servidor, por que se incrementa? Esto me causa problema en la secuencia, pues si sucede esto, podría saltarse numeros. He revisado el componetne MDOTrans en su propiedad AutoCommit y esta false, no he modificado en casi nada el MDODataset, solo SelectSQL para insertar la sentencia. Por que sucede? Gracias |
El MDODataset, tiene varias propiedades para indicar el Generador a usar y cuando aplicar los cambios:
Código:
GeneratorLink.Field = 'IDCLIENTE' saludos |
¡Hola a todos!
Jevo: Esto se debe a que el incremento en los generadores es irreversible. No importa si reviertes (rollback) la transacción, el generador se quedará como lo dejaste. Es un comportamiento normal de los generadores ser independientes de las transacciones. Un abrazo generado. Al González. :) |
Resp
Los generadores son arina de otro costal y se escapan del control de
transacional asi asi que si usas un generar para leevar un numero inportante como un numero de facturas asegurate que el momento que se llame es por que todo va bien. Si le buscan un poco d elogica esto esta pefecto por imaginense se los geradores no furan asi como contraolas un proceso de facturacion con multiples cajas. |
Yo no pregunte pero gracias por responder :D
Ahora una duda uso para en Insert: IDDieta un campo clave de autoincremento.
Cuando asigno el valor del campo clave (llamando a GetGenValue) ¿ Se ejecuta el disparador 2 veces al hacer el post ó commit ? - aparentemente no - PD Uso un componente TMDOQuery. |
Resp
En un disparador.
1. Al ser campo unico debe posser valor unico. 2. Si no es unico le asignas el valor actual del generador y luego despues de insertar le asignas el valor proximo del genrrador. En el sistema (en el caso de una factura) puedes mostrar el numero que podria tener no el que en realidad va a tener. Por que si es el caso que hay varios clientes(termonales, pc) facturando cada quien debe octner el numero una vez guardado. En este caso el el segundo punto no es valido aqui debes asignar el valro en un before insert. |
La franja horaria es GMT +2. Ahora son las 17:42:48. |
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