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. |
#7
|
|||
|
|||
ok asi me lo omaginaba, lo haremos y te comentare por este medio que problemas se presentaron
agradeciendo de antemano la atención prestada |
#8
|
||||
|
||||
Resp
Tu peo no es de base de datos si no de aplicacion.
Lo que quieres es si existe el nit que lo muestre si no que lo inserte. haces un select sobre la tabla donde el edit.text sea igual al nit. Si encuentras una considencia la muentra si no ya estas insertando cuando edites cualquie campo dentro d el abase de datos. Este trabajo s eme hace mas facil ya que uso ibo y los dbedit tiene un campo uq ese llama para el cual puedo usar dentro del sql y el se encarga de pasarlo automaticamente.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
#9
|
|||
|
|||
Y como lo hao desde un Edit
Hola Compañeros
bueno como les habia dicho al principio del enlace, mi tabla es pequeña, solo para aprendizaje. El ejemplo que estamos realizando es el del tutor de Paradox a interbase, que me ha servidor demasiado. todo muy bien cuando usamos un DbGrid, pero queremos Usar unos Edit Como hago para grabar la información en mi tabla En el Ibdataset1 en la propiedad InsertSQL inserte el siquiente codigo
Supuestamente me pasa los datos de los Edit a la tabla. Pero en mi boton de grabar como lo hago Código PHP:
|
#10
|
|||
|
|||
No te compliques la vida si usas el IBDataset,
Entra solo la propiedad SelectSQL, lo demas se genera automaticamente pinchando con el boton derecho sobte el componente y la opcion Dataset Editor, con el asistente se generan las demas SQLs, asi podras utilizar los metodos insert, edit, post etc. del dataset.. |
#11
|
||||
|
||||
Facil, Usa:
Cita:
Tambien puedes usar: AsInteger, AsDateTime, AsCurrency segun el tipo de datos
__________________
Sitrico |
#12
|
|||
|
|||
Agradecimiento
Te agradezco la información, lo colocaré en práctica y ver si resuelve mi inquietud
|
#13
|
||||
|
||||
Resp
Si quieres usar un boton x o y pudes crear una accion de base de datos y la relacionas con el data source dle data set y esta con el btos(componete t action de la paeta standart).
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
|
|
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 |
|