![]() |
Generar un valor por default distinto para cada insert
Hola, desde ya gracias de antemano, estoy con firebird 1.5 y delphi 7
Estoy probando de generar un valor por default distinto para cada insert y no recibo nada, he probado en la BD Trigger Before Insert donde ya genero el ID pero el tema es que al darle + al Navigator no me aparece ningun valor por default en el DBEdit (ni tampoco el ID aunque si se guarda correctamente). Lo que necesito deberia trabajar similar a como se define el valor por default en la tabla con por ejemplo CAMPO1 FLOAT DEFAULT 5, que esto si funciona, al darle + al Navigator me coloca 5 Yo necesito generar un valor por ejemplo Select max(campo1) from tabla y mandarselo como default al campo1 que estoy insertando. Esto lo debo hacer en la base de datos, no me vale hacerlo en el Before Insert de la Tabla de Delphi Muchas Gracias |
Procedimiento Almaceando
Usa un porcedimiento almacenado en ONNEWRECORD, veras las ventajas.
Lo que pasa es que los valores por default se colocan en el servidor cuando haces el post, no antes no después y para peor no los ves hasta que abres de nuevo la tabla. Ojo es un problema de transacciones, ahora no me acuerdo como se arregla, pero es mejor usar la solución que te di primero. |
Cita:
Si tienes concurrencia, no se si puedes tener problemas con los triggers; Otra opción es un Stored Procedure (que protegido debidamente con transacciones) te puede ofrecer un valor único. |
Yo uso un tigger y me da un valor unico para cada registro.
Saludos |
Cita:
Obviamente, este valor debe generarse desde delphi, en un trigger de la base de datos no resulta tan útil si la interacción se lleva a cabo solo desde el programa de delphi, pues este será incapaz de reconocer la fila que ha insertado. Si habrá interacción desde otras fuentes, digamos isql, entonces como auxiliar pondría un trigger before insert que asigne un valor al nuevo registro solamente si el campo en cuestión viene nulo. Hasta luego. ;) |
Cita:
El problema de los generadores es que si generas un número y luego deshaces el Insert o borras el registro, ese valor se pierde y al generar el siguiente tendrás un "hueco" en la numeración; Al proponer en el mensaje original un Max, pensé que quedaba desechada esa opción. Si eso no es importante, está claro, debes usar generadores, que para eso están. |
Cita:
Cita:
Creo que es importante tener en cuenta, al modelar un sistema, que es una mala idea usar los números de documento fiscales o contables como llave primaria. Creo que se gana mucha independencia si usas una llave totalmente artificial y luego asignas los números de documento según corresponda. Desde este punto de vista, tener un hueco en el correlativo no tiene ninguna importancia. Hasta luego. ;) |
Cita:
Cita:
|
Cita:
Cita:
Si al final de cuentas no puede asignarse el número, el usuario siempre tiene el chance de dejar grabado el registro y volver luego para asignarle un número, con lo que tampoco perderá trabajo... En fin, no hay un método perfecto, pero si hay mecanismos mas o menos sofisticados para atacar este asunto... Saludos. ;) |
Bueno probe de hacerlo en un procedimiento almacenado en ONNEWRECORD dentro de Delphi y anda ok, Gracias a todos por las ideas aportadas
Fabian |
La franja horaria es GMT +2. Ahora son las 21:32:35. |
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