Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema al Almacenar Datos (https://www.clubdelphi.com/foros/showthread.php?t=22615)

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

Problema al Almacenar Datos
 
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

Cita:

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:

Código Delphi [-]
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:

Código:

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

Cita:

Empezado por (VIH)Lestat
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:

Código:

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.

Cita:

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

Cita:

Empezado por maeyanes
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.


La franja horaria es GMT +2. Ahora son las 19:44:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi