FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
MAnejando la integridad de los Datos en Firebird
Hola compañeros
ÇComo lo he manifestado en preguntas anteriores son nuevo en esto de el Firebird, y queremos en estas vacaciones migrar mi viejo aplicativo de Paradox a Firebird Según lo que hemos leído en el foro y entras páginas, tomé la desición de usar los IBX comommetodo de conexión de mi firebird. Todos los ejemplos que hemos hecho han resultado de mucha ayuda y aprendizaje, pero también han iniciado a salir las dudas que no he podido resolver. Se ha creado una tabla ejemplo pequeña con la siguiente composición
Le ingresamos algunos datos, pero como no se debe repetir el campo NIT. tratamos de resolver el problema como se hace en paradox, el cual es recoger el valor a verificar y mediante una buisquedad en la tabla, si se encuentra, nos ubicamos en el y traemos la información. En firebird los conceptos son totalmente diferentes Código:
1. Podemos hacerlo mediante un TRIGGERS ó disparador, en el Before Insert. 2. Mediante un Procedimiento Almacenado 3. Este a pesar que no lo he leído me imagino ue también es factible, y es mediante código en Delphi. Se que hay una forma de programarlo y seria algo asi
Como proceso esta información. |
#2
|
|||
|
|||
en la última sentencia obliga a que cuando se setee un valor a idetapa en la tabla Tabla1, este valor exista en la tabla Etapas (campo id) se podrían según el caso y las necesidades aplicar variaciones, como por ejemplo que cuando se borre un registro de Etapas, borre todos los registros de Tabla1 donde el IdEtapa corresponde a Id de la tabla Etapas. Esto se denomina borrado en cascada. También se puede definir una actualización en cascada También a través de dominios puede implementarse algún tipo de validación y mantención de la integridad de los datos. Por ejemplo:
Saludos TJose |
#3
|
|||
|
|||
Agradeciendo tu colaboración
No hay otra forma mas entendible para realizar esta operación, se me hace complicado hacer un tabla diferente para esta necesidad como se podria realizar de unas forma más sencilla |
#4
|
|||
|
|||
para el campo NIT
veo que lo has definido como clave primaria ya con esto no se podrán repetir (por estar definido como primary key) También puedes hacer que no se repitan valores en campos que no son clave primaria con la sentecia siguiente
En este caso no podrán ingresarse registros donde el campo Etapa se repita. Saludos TJose |
#5
|
|||
|
|||
agradeciendo de nuevo la colaboración al problema
hola compañeros
De nuevo gracias por su colaboración. Bueno, queremos que cuando un nuevo NIT ingrese al sistema, primero verifique si se encuentra en la base de datos; si no se encuentra se introducen todos los datos, pero si se encuentra, debemos hacer llegar los datos a la pantalla bien sea para su actualización ó la eliminación. agradeciendo de antemano la atención prestada |
#6
|
||||
|
||||
Creeme que la que te comentaron es la manera correcta, (indice unico).
Debes manejar la excepción de clave duplicada. Para lograr lo que quieres puedes hacer lo siguiente: 1 lees el NIT 2 Inicias una transacción (StartTransaction). 3 insertas el NIT (INSERT INTO TABLA (NIT) AS (:NIT) 4 Ejecutas el SQL 5 Si hay error = NIT (Repetido ó invalido) Aqui puedes leer los datos para modificar ó eliminar. 6 Haces un RollBack sobre la transacción (2) (desaparece la inserción y continuas) 7 pides los demás datos 8 Guardas todo (ahora sí commit).
__________________
Sitrico Última edición por sitrico fecha: 23-07-2007 a las 17:27:06. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Manejando manejadores... | Berto2003 | Varios | 5 | 06-03-2007 10:38:40 |
Manejando la tabla ASCII en C | aeff | C++ Builder | 4 | 22-01-2007 18:02:47 |
Problema manejando excepciones | David | OOP | 1 | 28-07-2006 19:17:48 |
problema manejando datos =( | CI>140 | Conexión con bases de datos | 4 | 22-09-2003 09:56:16 |
problemas manejando campos | CI>140 | Conexión con bases de datos | 1 | 20-09-2003 15:59:40 |
|