PDA

Ver la Versión Completa : Problema al Almacenar Datos


(VIH)Lestat
21-06-2005, 18:02:08
Hola:

De antemano les pido una disculpa por estar preguntando mucho en este foro.. pero solo aqui hay personas capacitadas para ayudarme con mis problemas...

Miren.. tengo el siguiente problema al almacenar datos..

Estoy utilizando 4 IBTABLES en para almacenar datos de los alumnos..

IBTABLE1---->ALumnos (Datos PErsonales de los alumnos)
IBTABLE2---->Alumno_carrera (Almacena el IDalumno y IDcarrera con ForeignKeys)
IBTABLE3---->Alumno_semestre (almacena IDalumno y semestre)
IBTABLE4---->Alumno_doc(almacena ID_alumno y Documentos entregados)

a las ultimas 3 tablas les tengo puesto en su propiedad MASTERSOURCE la tabla "alumnos" y en la propiedad MASTERFIELD la relacion entre los ID de las tablas o sea... ID_alumno(tabla Alumno_carrera)---->ID(tabla Alumnos) .. ME explico!!!!!!

Pero al momento de guardar los datos me marca un error en la tabla de "Alumno_doc" me dice que ay una violacion de FOREIGN KEY

Constraint "INTEG_113" on table "ALUMNO_DOC"

A que se debera este famoso error??? si en su propiedad mastersource de la tabla le tengo puesto la tabla padre ALUMNOS... y supuestamente el valor del ID del alumno me lo debe guardar automaticamente en la hijo?? estoy en lo correcto o estoy mal????? que alguien me lo diga para saber que puedo hacer..

Ahh y por cierto los valores de la TABLA ALUMNO_DOC almacena valores booleanos pero si ustedes saben INTERBASE no maneja este tipo de datos por lo que cree mi dominio y almacenara '1' si el valor es VERDADERo y '0' si el valor es FALSO.. y estos valores los almacenara por medio de DBCHeckbox... no sera este otro problema por el cual me marca error al momento de almacenar los datos?????

Espero su respuesta lo + pronto posible...

SAlu2

maeyanes
21-06-2005, 20:02:32
Prueba creando un evento OnNewRecord para IBTable4 y en el código pon algo como:


IBTable4.FieldByName('ID_Alumno').Value := IBTable1.FieldByName('ID_Alumno').Value;


Así cada vez que hagas un Insert, el campo ID_Alumno de IBTable4, tomará el valor del alumno seleccionado actualmente en IBTable1.


Otra cosa, para bases de datos Cliente/Servidor, se aconseja hacer uso de componentes TQuery en lugar de TTable. En el caso de las IBX, te recomiendo que uses los TIBDataSet.

Saludos...

(VIH)Lestat
21-06-2005, 20:10:43
ok lo tomare muy en cuenta y grax por el consejo ... si funciona te mandare un mensaje para darte las grax salep???

SALU2 y grax de nuevo..

(VIH)Lestat
22-06-2005, 03:16:24
Disculpa la molestia MAEYANES pero hice lo que me dijiste acerca de crear el evento onNewRecord de mi tabla y lo ejecute y me sigue marcando el mismo error de llave foranea.. ME indica error por que creo que no se almacena la clave del alumno de la tabla alumnos que tengo ligada a la de alumnos_doc...

es mas ya cambie el codigo y a mi evento on newrecord le puse lo siguiente:

IBTalum_doc.FieldByName('dni_alumno'):= form2.DBEdit1.text

para que tome el valor directamente del DBedit que contiene la clave del alumno cuando la teclean....

Una ultima pregunta cuando ejecuta el procedimiento onNewRecord del IBTalum_doc como lo muestro arriba .. ese codigo ya almacena automaticamente la clave en la mi tabla IBTalum_doc sin necesidad de ejecutar la palabra POST para guardar los datos???

maeyanes
22-06-2005, 15:35:29
Disculpa la molestia MAEYANES pero hice lo que me dijiste acerca de crear el evento onNewRecord de mi tabla y lo ejecute y me sigue marcando el mismo error de llave foranea.. ME indica error por que creo que no se almacena la clave del alumno de la tabla alumnos que tengo ligada a la de alumnos_doc...

es mas ya cambie el codigo y a mi evento on newrecord le puse lo siguiente:

IBTalum_doc.FieldByName('dni_alumno'):= form2.DBEdit1.text

para que tome el valor directamente del DBedit que contiene la clave del alumno cuando la teclean....

La clave que usas, es de un registro ya existente en la tabla de alumnos? O es un Alumno nuevo que estás dando de alta?

Si es la segunda opción, tienes que guardar primero el registro del alumno y luego el de IBTalum_doc.


Una ultima pregunta cuando ejecuta el procedimiento onNewRecord del IBTalum_doc como lo muestro arriba .. ese codigo ya almacena automaticamente la clave en la mi tabla IBTalum_doc sin necesidad de ejecutar la palabra POST para guardar los datos???

No, siempre es necesario que llames al método Post. Este evento solo sirve para que ejecutes cierto código al momento de crear un nuevo registro. Mayormente se usa para inicializar ciertos campos sin cambiar el estado del registro.


Saludos...

(VIH)Lestat
22-06-2005, 17:06:44
La clave que usas, es de un registro ya existente en la tabla de alumnos? O es un Alumno nuevo que estás dando de alta?

Si es la segunda opción, tienes que guardar primero el registro del alumno y luego el de IBTalum_doc.




Saludos...
Es un registro Nuevo que estoy dando de alta MARCO.. ENtonces tengo que guardar primero el registro del usuario con todo y su clave, para que despues yo la pueda copiar en mi otra tabla??? oye y que me recomiendas utilizar .. sera que con el evento BEFOREPOST de mi Tabla IBTalum_doc pueda almacenar el registro????... ES que tengo un boton que almacena los datos, o sea ese boton hace la funcion de POST de mi tabla PADRE.. y de todas las Tablas HIJo entonces pensaba en generar ese evento para mi tabla hijo, claro una vez que guarde el registro nuevo......SI ME EXPLICO!!!!

No, siempre es necesario que llames al método Post. Este evento solo sirve para que ejecutes cierto código al momento de crear un nuevo registro. Mayormente se usa para inicializar ciertos campos sin cambiar el estado del registro.